Bash间接数组寻址?

时间:2011-01-03 04:53:43

标签: arrays bash

假设我有一些bash数组:

A1=(apple trees)
A2=(building blocks)
A3=(color television)

索引J=2,如何获取A2的数组内容?

3 个答案:

答案 0 :(得分:20)

我已经找到了解决方案,可以通过以下方式完成:

$ Aref=A$J
$ echo ${!Aref}
building
$ Aref=A$J[1]
$ echo ${!Aref}
blocks
$ Aref=A$J[@]
$ echo "${!Aref}"
building blocks

答案 1 :(得分:17)

值得注意的是,即使是在评估变量时也会替换索引:

$ A2=(building blocks)
$ Aref=A2[index]
$ index=1
$ echo "${!Aref}"
blocks

答案 2 :(得分:2)

今天(使用bash 4.3及更高版本),最佳做法是使用nameref支持:

A1=(apple trees)
A2=(building blocks)
A3=(color television)
J=2

declare -n A="A$J"
printf '%q\n' "${A[@]}"

...将正确发出:

building
blocks

这也可以在ksh93上以nameref A="A$J"的形式获得。有关详细信息,请参阅BashFAQ #6