向数组中添加一个新元素,而不用在Bash中指定索引

有没有办法像PHPs $array[] = 'foo'; 在bash vs做:

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

就在这里:

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

Bash参考手册 :

在赋值语句为shellvariables或数组索引赋值(参见数组)的上下文中,可以使用“+ =”运算符来追加或添加variables的先前值。

正如愚笨的人指出,重要的是要注意arrays是否从零开始,是连续的。 由于您可以对非连续索引进行赋值和取消设置, ${#array[@]}并不总是数组末尾的下一项。

 $ array=(abcdefgh) $ 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 
 $ declare -a arr $ arr=("a") $ arr=("${arr[@]}" "new") $ echo ${arr[@]} a new $ arr=("${arr[@]}" "newest") $ echo ${arr[@]} a new newest 

如果你的数组总是连续的,并从0开始,那么你可以这样做:

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

${#array_name[@]}获取数组的长度

有了一个索引数组,你可以像这样:

 declare -aa=() a+=('foo' 'bar')