使用变量访问bash关联数组

时间:2013-06-26 03:52:44

标签: bash associative-array

我现在已经花了几个小时,似乎无法找到解决方案。

我在代码中设置了三个关联数组:

模板1 模板2 template3

这实际上可能是n个数组,并且代码变量也在代码中设置,以便:

template_name="template$counter"

会给下一个模板创建。所以我的问题是当我想循环n个关联数组时,我需要做类似的事情:

for (( i = 1; i < $counter; i++ )); do
  template_name="template$i"
    for i in ${!template_name[@]}; do
      echo "$i - ${template_name[$i]}"
    done
done

但它不起作用 - 我得到了错误的替换错误。似乎我可以使用变量名来动态访问关联数组。还有其他方法来看待这个问题吗?

2 个答案:

答案 0 :(得分:1)

经过多次挖掘后,我找到了答案:

eval echo "APP_NAME $template_name: "\${${template_name}[APP_NAME]}

答案 1 :(得分:0)

我不确定这是否是您想要的,但我认为它可以帮助您找到比使用eval更好的解决方案。

#!/bin/bash
template0=( "123" "456" )
template1=( "zxc" "edc" )

counter=2
for (( i = 0; i != $counter; ++i )); do
    template_name="template$i[@]"
    echo ${!template_name}
    for j in ${!template_name}; do
        echo "$j - template$i"
    done
done

产地:

==> 123 456
==> 123 - template0
==> 456 - template0
==> zxc edc
==> zxc - template1
==> edc - template1