在 bash/shell 中声明数组 [重复]

Posted

技术标签:

【中文标题】在 bash/shell 中声明数组 [重复]【英文标题】:Declare array in bash/shell [duplicate] 【发布时间】:2021-11-05 19:43:11 【问题描述】:

我对如何在 bash 中声明数组感到困惑。

假设:

$arr[1]=x
$arr[2]=y
$arr[3]=z

代码:

declare -A/-a object
fo var in $arr[@]
do
    object["a"]="$arr[1]"
    object["b"]="$arr[2]"
    object["c"]="$arr[3]"
    echo $object["a"]
done

输出:z

我想要的是:x

如果我评论了object["b"]object["c"],那么输出是正确的:x

不管-A还是-a,还是不行。这个问题与我的 bash 环境有关吗?

GNU bash,版本 3.2.57(1) -release (x86_64_apple-darwin18)

【问题讨论】:

在您的代码上放置一个有效的 shebang 并将其粘贴到 shellcheck.net 以进行验证。推荐。 大写 -A 声明一个关联数组(必须在使用前完成,不像常规数组) 我在 S.O. 中看到了一些重复的内容。所以我两次删除了我的答案:-) 【参考方案1】:

索引数组要求下标必须被计算为一个数字。在这种情况下,object["a"] object["b"] object["c"] 被视为object[0] object[0] object[0] 如果键是任意字符串,则可以使用关联数组。使用-A 而不是-a 声明它

-a 每个名称都是一个索引数组变量(参见上面的数组)。

-A 每个名称都是一个关联数组变量(参见上面的数组)。

【讨论】:

没用,请看我的更新

以上是关于在 bash/shell 中声明数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在c ++中声明一个全局数组时,它可以给出的大小大于在main中声明它[重复]

如何在方法中声明数组[重复]

在c ++中全局声明的动态数组的多个定义[重复]

无法在 C++ 中声明动态二维数组 [重复]

数组如何绕过其声明的长度[重复]

在一个操作中声明后在结构中填充数组的最简单方法[重复]