0

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

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

模板1 模板2 模板3

这实际上可能是 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

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

4

2 回答 2

1

经过一番挖掘,我找到了答案:

eval echo "APP_NAME $template_name: "\${${template_name}[APP_NAME]}
于 2013-06-26T03:52:43.887 回答
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
于 2013-10-07T23:47:27.460 回答