Apakah ada cara untuk melakukan sesuatu seperti PHP $array[] = 'foo';
di bash vs doing:
array[0]='foo'
array[1]='bar'
Apakah ada cara untuk melakukan sesuatu seperti PHP $array[] = 'foo';
di bash vs doing:
array[0]='foo'
array[1]='bar'
Jawaban:
Ya ada:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
Dalam konteks di mana pernyataan penugasan memberikan nilai ke variabel shell atau indeks array (lihat Array), operator '+ =' dapat digunakan untuk menambahkan atau menambah nilai variabel sebelumnya.
ARRAY
ini hanyalah pengganti untuk nama variabel aktual. Bahkan jika indeks array Anda tidak berurutan, menambahkan dengan +=
hanya akan menetapkan indeks tertinggi + 1.
${myarray[@]}
- mereferensikan variabel array seolah-olah skalar sama dengan mengakses elemennya 0; dengan kata lain: $myarray
sama dengan ${myarray[0]}
.
Seperti yang ditunjukkan oleh Dumb Guy , penting untuk dicatat apakah array dimulai dari nol dan berurutan. Karena Anda dapat membuat penugasan ke dan menghapus indeks ${#array[@]}
yang tidak bersebelahan tidak selalu menjadi item berikutnya di akhir array.
$ array=(a b c d e f g h)
$ array[42]="i"
$ unset array[2]
$ unset array[3]
$ declare -p array # dump the array so we can see what it contains
declare -a array='([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")'
$ echo ${#array[@]}
7
$ echo ${array[${#array[@]}]}
h
Berikut cara mendapatkan indeks terakhir:
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
Itu menggambarkan cara mendapatkan elemen terakhir dari array. Anda akan sering melihat ini:
$ echo ${array[${#array[@]} - 1]}
g
Seperti yang Anda lihat, karena kita berurusan dengan array yang jarang, ini bukan elemen terakhir. Ini berfungsi pada array yang jarang dan berdekatan, meskipun:
$ echo ${array[@]: -1}
i
${array[@]: start[:count]}
Pengembalian jumlah elem. atau, jika tidak ditentukan, semua elem yang tersisa . mulai dari elem berikut .: - Jika mulai> = 0: dari elem. indeks siapa>> mulai. - Jika mulai <0: dari elem. yang indeksnya (indeks array terakhir + 1) - abs (mulai); CAVEAT: jika abs (mulai)> (indeks array terakhir + 1), string null dikembalikan. Jika jumlah ditentukan, karena banyak elemen dikembalikan, bahkan jika indeks mereka tidak berdekatan dari awal.
${array[-1]}
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
arr=("${arr[@]}" "new")
jika Anda memiliki elemen dengan spasi di dalamnya
Jika array Anda selalu berurutan dan dimulai dari 0, maka Anda bisa melakukan ini:
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
Jika Anda secara tidak sengaja menggunakan spasi di antara tanda sama dengan:
array[${#array[@]}] = 'foo'
Maka Anda akan menerima kesalahan yang mirip dengan:
array_name[3]: command not found
+=
sintaksnya (lihat jawaban @ e-t172) adalah (a) lebih sederhana, dan (b) juga bekerja dengan array yang tidak bersebelahan dan / atau tidak memulai dengan 0.
+=
ditambahkan, mis. Versi 2
$arr += ($el)
tampak membelah string dengan spasi dan menambahkan masing-masing elemen.
Dengan array yang diindeks, Anda dapat melakukan sesuatu seperti ini:
declare -a a=()
a+=('foo' 'bar')