【问题标题】:Substituting bash for loop variable to get array name [duplicate]用bash替换循环变量以获取数组名称[重复]
【发布时间】:2017-11-04 01:00:05
【问题描述】:

我正在尝试使用 bash for 循环来选择一个数组,我想在下一层的 for 循环中将其成员用作变量。我的问题是在第二个 for 循环中进行扩展,我无法弄清楚。

first_two_models=( model_one model_two )
second_two_models=( model_three model_four )


for name in first_two second_two; do
    for model in ${"$name_models"[@]}; do
        echo $model
    done
done

感谢您提供的任何帮助!

【问题讨论】:

  • 您要执行的操作(为了便于搜索)称为“间接数组扩展”。请参阅BashFAQ #6 -- 请注意,此处讨论的“nameref”语法在 bash 4.3 中可用。

标签: bash


【解决方案1】:

您需要先将数组引用构建为字符串,然后在该字符串上使用间接引用来提取值:

first_two_models=( model_one model_two )
second_two_models=( model_three model_four )

for name in first_two second_two; do
    array="${name}_models[@]"     # build reference as string
    for model in "${!array}"; do  # use indirect reference to access
        echo "$model"
    done
done

【讨论】:

  • 可能会考虑修复代码,以便在second_two_models+=( "Model Five" ) 下仍然有效;现在,ModelFive 是内部数组的单独迭代。
  • 谢谢@CharlesDuffy!固定。
【解决方案2】:
for name in 'first_two_models[@]' 'second_two_models[@]'; do
    for model in "${!name}"; do
        echo "$model"
    done
done

【讨论】:

  • 尝试在second_two_models+=( "* Model Four *" )之后运行它
  • 我明白你的意思是关于echo $model 没有引号,我没有关注这一点,但我会更新
猜你喜欢
  • 2018-12-07
  • 1970-01-01
  • 2020-11-12
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多