使用-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)也是如此.
省略它会产生与提供它相同的结果.
解决方法
对于数字索引数组,您可以跳过declare -a,但不能跳过关联数组的声明-A.为了证明后者:
declare array array[one]=1 array[two]=2 echo "${array[one]}"
…发出:
2
为什么?让我们使用declare -p数组来看:
$declare -p array declare -a array='([0]="2")'
单词1和单词2都被强制为数值0,因此它们覆盖了相同的键.
也就是说,声明-a数组不是一个完整的noop.相比:
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
……正确地发出声明-a array ='([0] =“zero”)’,这意味着在上面的代码中,只有在数组[0] =“零”行之后,数组才真正成为一个数组.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。