首页 > 解决方案 > 在 bash/shell 中声明数组

问题描述

我对如何在 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"]and object["c"],那么输出是正确的:x

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

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

标签: bashshell

解决方案


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

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

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


推荐阅读