有没有一种方法可以像$array[] = 'foo';
在bash中做PHP 那样做:
array[0]='foo'
array[1]='bar'
“ 如何添加/ bash中数组中删除一个元素/? ”
—
αғsнιη
有没有一种方法可以像$array[] = 'foo';
在bash中做PHP 那样做:
array[0]='foo'
array[1]='bar'
Answers:
就在这里:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
在赋值语句为外壳变量或数组索引赋值的情况下(请参见Arrays),可使用'+ ='运算符来追加或添加到变量的先前值。
ARRAY
只是实际变量名的占位符。即使你的数组的下标是不连续的,具有附加+=
只会分配到最高的指数+ 1
${myarray[@]}
-引用数组变量就好像它是一个标量一样,这与访问其元素0相同;换句话说:$myarray
与相同${myarray[0]}
。
正如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
${array[@]: start[:count]}
返回计数元素。或(如果未指定)所有剩余元素。从以下elem开始:-如果从> elem开始> = 0 :。索引> =开始。-如果开始<0:从elem。索引为(最后一个数组索引+ 1)-abs(开始); CAVEAT:如果abs(start)>(最后一个数组索引+ 1),则返回一个空字符串。如果指定了count,则返回多少个元素,即使它们的索引从开始就不连续。
${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")
,如果你有他们的空间元素
如果您的数组始终是顺序的,并且从0开始,则可以执行以下操作:
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
如果您无意间在等号之间使用空格:
array[${#array[@]}] = 'foo'
然后,您将收到类似于以下内容的错误:
array_name[3]: command not found
+=
语法(请参阅@ e-t172的答案)更简单(a),并且(b)也适用于非连续和/或不以0
+=
添加之前,它也适用于较早版本的bash,例如版本2
$arr += ($el)
似乎是按空格分割字符串并添加了每个元素。
使用索引数组,您可以执行以下操作:
declare -a a=()
a+=('foo' 'bar')