【问题标题】:Accessing bash associative array using variables使用变量访问 bash 关联数组
【发布时间】:2013-06-26 03:52:43
【问题描述】:

我现在已经花了几个小时来解决这个问题,但似乎找不到解决方案。

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

模板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

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

【问题讨论】:

  • 您应该:(1) 重新考虑您的设计或 (2) 更改语言。真的不建议在bash 中做这些事情。

标签: bash associative-array


【解决方案1】:

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

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

【讨论】:

  • 我知道 - 但我在工作中被 bash 卡住了,找不到其他方法来达到我需要的结果。
【解决方案2】:

我不确定这是否符合您的预期,但我认为它可以帮助您找到比使用 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

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 1970-01-01
    • 2021-12-18
    • 2022-07-21
    • 2023-03-27
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多