通过变量间接访问bash关联数组

时间:2019-03-18 07:17:06

标签: arrays bash associative

我希望使用变量访问关联数组。 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]}"

不声明数组是否有问题?

1 个答案:

答案 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