用bash替换循环变量以获取数组名
我试图使用bash for循环来选择一个数组,其中的成员将用作向下一级for循环中的变量。我的问题是在第二个for循环中进行扩展,我无法理解用bash替换循环变量以获取数组名,bash,Bash,我试图使用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
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
谢谢你能提供的任何帮助 首先需要将数组引用构建为字符串,然后对该字符串使用间接引用来提取值:
for name in 'first_two_models[@]' 'second_two_models[@]'; do
for model in "${!name}"; do
echo "$model"
done
done
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
可能会考虑修复代码,所以如果<代码>第二个TooOx模型+=(“模型五”),它仍然有效;现在,
Model
和Five
是内部数组的独立迭代。谢谢@CharlesDuffy!修复。请在second\u two\u models+=(“*Model Four*”)
之后尝试运行此命令。我了解您的观点是关于echo$Model
,没有引号,我没有关注这一点,但我将更新您希望执行的操作(为了便于搜索)称为“间接数组扩展”。请参阅--注意,这里讨论的“nameref”语法在Bash4.3中可用。