Menambahkan elemen baru untuk sebuah array tanpa menentukan indeks di Bash

Apakah ada cara untuk melakukan sesuatu seperti PHPs $array[] = 'foo'; di bash vs lakukan:

array[0] = 'foo'
array[1] = 'bar'
Larutan

Ya ada:

ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')

Bash Referensi Manual:

Dalam konteks di mana tugas pernyataan ini menetapkan nilai ke variabel shell atau indeks array (lihat Array), the '+=' operator yang dapat digunakan untuk menambahkan atau menambah variabel's nilai sebelumnya.

Komentar (15)

Sebagai Orang Bodoh poin, it's penting untuk dicatat apakah array dimulai dari nol dan berurutan. Karena anda dapat membuat tugas untuk dan diset non-contiguous indeks ${#array[@]} tidak selalu item berikutnya pada 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 ini's bagaimana untuk mendapatkan lalu indeks:

$ end=(${!array[@]})   # put all the indices in an array
$ end=${end[@]: -1}    # get the last one
$ echo $end
42

Yang menggambarkan bagaimana untuk mendapatkan elemen terakhir dari array. Anda'll sering melihat ini:

$ echo ${array[${#array[@]} - 1]}
g

Seperti yang anda lihat, karena kita're berurusan dengan array jarang, ini isn't elemen terakhir. Ini bekerja pada kedua jarang dan bersebelahan array, meskipun:

$ echo ${array[@]: -1}
i
Komentar (3)
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
Komentar (3)

Jika anda menginap selalu berurutan dan dimulai dari 0, maka anda dapat melakukan ini:

array[${#array[@]}]='foo'

# gets the length of the array
${#array_name[@]}

Jika anda secara tidak sengaja menggunakan spasi antara tanda sama:

array[${#array[@]}] = 'foo'

Kemudian anda akan menerima pesan galat yang mirip dengan:

array_name[3]: command not found
Komentar (4)

Dengan array berindeks, anda dapat untuk sesuatu seperti ini:

declare -a a=()
a+=('foo' 'bar')
Komentar (0)