我希望使用变量访问关联数组。 post的公认答案中的示例正是我想要的:
$ declare -A FIRST=( [hello]=world [foo]=bar )
$ alias=FIRST
$ echo "${!alias[foo]}"
但是在使用bash 4.3.48或bash 3.2.57时,这对我不起作用。 但是,如果我不声明(“ declare -A”)数组,它就可以工作,即可以工作:
$ FIRST[hello]=world
$ FIRST[foo]=bar
$ alias=FIRST
$ echo "${!alias[foo]}"
不声明数组是否有问题?
答案 0 :(得分:1)
它按预期方式工作,您只是错过了定义访问该值的另一级间接操作,
declare -A first=()
first[hello]=world
first[foo]=bar
alias=first
echo "${!alias[foo]}"
上述结果显然是空的,因为其他答案指出,因为尚未创建对数组键的引用。现在定义一个item
来引入第二级间接引用,以指出实际的key
值。
item=${alias}[foo]
echo "${!item}"
foo
现在将项目指向下一个键hello
item=${alias}[hello]
echo "${!item}"
world
或更详细的示例是,在关联数组的键上运行循环
# Loop over the keys of the array, 'item' would contain 'hello', 'foo'
for item in "${!first[@]}"; do
# Create a second-level indirect reference to point to the key value
# "$item" contains the key name
iref=${alias}["$item"]
# Access the value from the reference created
echo "${!iref}"
done