有没有办法$array[] = 'foo';在bash中执行类似PHP的操作:
array[0] = 'foo'
array[1] = 'bar'
Run Code Online (Sandbox Code Playgroud)
Eti*_*mps 1429
就在这里:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
Run Code Online (Sandbox Code Playgroud)
在赋值语句为shell变量或数组索引赋值的上下文中(参见Arrays),'+ ='运算符可用于追加或添加到变量的先前值.
Pau*_*ce. 74
正如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
Run Code Online (Sandbox Code Playgroud)
以下是获取最后一个索引的方法:
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
Run Code Online (Sandbox Code Playgroud)
这说明了如何获取数组的最后一个元素.你会经常看到这个:
$ echo ${array[${#array[@]} - 1]}
g
Run Code Online (Sandbox Code Playgroud)
如您所见,因为我们正在处理稀疏数组,所以这不是最后一个元素.这适用于稀疏和连续数组,但是:
$ echo ${array[@]: -1}
i
Run Code Online (Sandbox Code Playgroud)
gho*_*g74 48
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
Run Code Online (Sandbox Code Playgroud)
Dum*_*Guy 25
如果您的数组始终是顺序的并且从0开始,则可以执行以下操作:
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
Run Code Online (Sandbox Code Playgroud)
如果你无意中在等号之间使用了空格:
array[${#array[@]}] = 'foo'
Run Code Online (Sandbox Code Playgroud)
然后你会收到类似于的错误:
array_name[3]: command not found
Run Code Online (Sandbox Code Playgroud)