加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数组 – 创建bash数组是否需要-a标志?

发布时间:2020-12-15 21:36:14 所属栏目:安全 来源:网络整理
导读:使用-a标志声明bash数组的附加值是什么,如下所示: 与国旗 declare -a arr1arr1[0]="array1-zero"arr1[1]="array1-one"echo ${arr1[0]}echo ${arr1[1]} …如果省略该选项,行为是相同的,如下所示: 没有-a选项 declare arr2arr2[0]="array2-zero"arr2[1]="arr
使用-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] =“零”行之后,数组才真正成为一个数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读