在Bash中是否有像PHP的$array[] = 'foo';
这样的方式,而不是使用:
array[0]='foo'
array[1]='bar'
是的,有这个功能:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
在赋值操作符将一个值分配给shell变量或数组索引(请参见数组)的情况下,可以使用“+=”运算符来附加或添加到变量的先前值。
此外:
当使用复合赋值(请参见下面的数组)向数组变量应用+=时,变量的值不会被取消设置(如使用=时),并且新值将追加到数组的末尾,开始位置为索引的最大值加1(对于索引数组)。
${myarray[@]}
。将数组变量像标量一样引用是访问其第0个元素的同义词;换句话说:$myarray
和${myarray[0]}
是相同的。 - mklement0正如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]}
返回 count 个元素,如果未指定,则返回以下元素中的所有“剩余”元素:${array[-1]}
- Dennis Williamson$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
arr=("${arr[@]}" "new")
。 - kbolinoarray[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
如果你不小心在等号之间使用了空格:
array[${#array[@]}] = 'foo'
然后你会收到类似的错误信息:
array_name[3]: command not found
+=
语法(见 @e-t172 的回答)更加简单,并且也适用于非连续和/或不以0开始的数组。 - mklement0+=
。 - Zoey Hewll$arr += ($el)
似乎会将字符串按空格分割并添加每个元素。 - Max使用索引数组,您可以像这样操作:
declare -a a=()
a+=('foo' 'bar')
添加 元素:
array+=("${element}")
追加另一个数组:
array+=("${array[@]}")
追加命令输出:
readarray -t output < <(command)
array+=("${output[@]}")
test_array=(1 2 3 4)
test_array+=(5)
echo "${test_array[@]}"
1 2 3 4 5
< p > 使用+=
运算符可以将单个元素或多个元素附加到数组中,例如,您可以像这样向数组附加更多元素:
test_array+=(6 7 8 9)
echo "${test_array[@]}"
unset
命令和元素的值。test_array=(1 2 3 4 5)
unset test_array[2]
echo "${test_array[@]}"