Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用bash替换循环变量以获取数组名_Bash - Fatal编程技术网

用bash替换循环变量以获取数组名

用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

我试图使用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

谢谢你能提供的任何帮助

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

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中可用。