向数组中添加一个新元素,而不用在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')