smi*_*lov 4 arrays bash associative-array declare
使用-a标志声明bash数组的附加值是什么,如下所示:
与国旗
declare -a arr1
arr1[0]="array1-zero"
arr1[1]="array1-one"
echo ${arr1[0]}
echo ${arr1[1]}
Run Code Online (Sandbox Code Playgroud)
...如果省略该选项,行为是相同的,如下所示:
没有-a选项
declare arr2
arr2[0]="array2-zero"
arr2[1]="array2-one"
echo ${arr2[0]}
echo ${arr2[1]}
Run Code Online (Sandbox Code Playgroud)
关联数组(选项-A)也是如此.省略它会产生与提供它相同的结果.
您可以跳过declare -a数字索引数组,但不能跳过declare -A关联数组.为了证明后者:
declare array
array[one]=1
array[two]=2
echo "${array[one]}"
Run Code Online (Sandbox Code Playgroud)
...发出:
2
Run Code Online (Sandbox Code Playgroud)
为什么?我们declare -p array来看看:
$ declare -p array
declare -a array='([0]="2")'
Run Code Online (Sandbox Code Playgroud)
单词one和two都被强制为数值0,所以他们覆盖了相同的键.
那说,declare -a array不是一个完整的noop.相比:
unset array # start from a blank slate
declare -a array
declare -p array
Run Code Online (Sandbox Code Playgroud)
...发出:
declare -a array='()'
Run Code Online (Sandbox Code Playgroud)
然而,如果我们遗漏了-a,我们看到没有分配类型数据,所以假设我们的变量只是一个字符串,直到它被分配给一个明确它应该是一个数组的方式:
unset array # start from a blank slate
declare array
declare -p array
Run Code Online (Sandbox Code Playgroud)
...发出declare -- array="",除非有作为任务:
unset array # start from a blank slate
declare array
array[0]="zero"
declare -p array
Run Code Online (Sandbox Code Playgroud)
...正确发出declare -a array='([0]="zero")',意味着在上面的代码中,只有array[0]="zero"在线array实际上成为一个数组之后.