使用如下所示的-a标志声明bash数组的附加值是什么:
带有标志
declare -a arr1
arr1[0]="array1-zero"
arr1[1]="array1-one"
echo ${arr1[0]}
echo ${arr1[1]}
...如果省略该选项,则行为相同,如下所示:
不带-a选项
declare arr2
arr2[0]="array2-zero"
arr2[1]="array2-one"
echo ${arr2[0]}
echo ${arr2[1]}
关联数组也是如此(选项-A)。 省略它可以提供与提供相同的结果。
答案 0 :(得分:6)
对于数字索引数组,您可以跳过declare -a
,但是对于关联数组,您不能跳过declare -A
。为了演示后者:
declare array
array[one]=1
array[two]=2
echo "${array[one]}"
...发出:
2
为什么?让我们用declare -p array
看一下:
$ declare -p array
declare -a array='([0]="2")'
one
和two
这两个词都被强制转换为数字值0
,因此它们改写了相同的键。
也就是说,declare -a array
并不是一个完全没有问题的人。比较:
unset array # start from a blank slate
declare -a array
declare -p array
...发出:
declare -a array='()'
如果我们忽略了-a
,我们会看到没有分配类型数据,因此我们的变量被假定为只是一个字符串,直到以明确表明应该分配给它的方式分配给它为止。数组:
unset array # start from a blank slate
declare array
declare -p array
...发出declare -- array=""
,除非有分配:
unset array # start from a blank slate
declare array
array[0]="zero"
declare -p array
...可以正确发出declare -a array='([0]="zero")'
,这意味着在上面的代码中,只有在array[0]="zero"
行之后,array
实际上才变成数组。