В контексте, когда оператор присваивания присваивает значение переменной оболочки или индексу массива (см. раздел "Массивы" ), оператор "+ =" может использоваться для добавления или добавления к предыдущему значению переменной.
Ответ 2
Как указывает Dumb Guy, важно отметить, начинается ли массив с нуля и является последовательным. Так как вы можете назначать и удалять несмежные индексы ${#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
Здесь, как получить последний индекс:
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
Это иллюстрирует, как получить последний элемент массива. Вы часто увидите это:
$ echo ${array[${#array[@]} - 1]}
g
Как вы можете видеть, потому что мы имеем дело с разреженным массивом, это не последний элемент. Это работает как на разреженных, так и на смежных массивах:
$ echo ${array[@]: -1}
i
Ответ 3
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
Ответ 4
Если ваш массив всегда последователен и начинается с 0, вы можете сделать это:
array[${#array[@]}] = 'foo'
${#array_name[@]} получает длину массива
Ответ 5
С индексированным массивом вы можете сделать что-то вроде этого: