如何在shell脚本中迭代多个列表

时间:2017-07-10 11:40:24

标签: bash

我有两个列表

A='"foo" "bar"'
foo='"alpha" "beta"'
bar='"gamma" "delta"'

我想迭代列表A并在嵌套循环中迭代列表foo和bar,以便我可以在嵌套循环中执行命令,我可以执行命令,如

./submit_to_cluster --x=foo --y=alpha

./submit_to_cluster --x=bar --y=delta

以嵌套方式对两个列表进行迭代是否是有效执行此操作的最佳方法?

1 个答案:

答案 0 :(得分:1)

在您的示例中,A不是列表。如果需要列表,请使用列表。这是一个列表:A=(foo bar)。这是引用数组的方法:${A[@]}

您正在寻找的是间接参考。您在变量中有变量的名称。这是间接引用:${!v}

你的问题是:如何间接引用数组?

这个问题已经回答:How to iterate over an array using indirect reference?

这显示了如何将答案应用于您的示例:

A=("foo" "bar")
foo=("alpha" "beta")
bar=("gamma" "delta")

for x in "${A[@]}"; do
  xa="${x}[@]"
  for y in "${!xa}"; do
    echo ./submit_to_cluster --x="$x" --y="$y"
  done
done

打印:

./submit_to_cluster --x=foo --y=alpha
./submit_to_cluster --x=foo --y=beta
./submit_to_cluster --x=bar --y=gamma
./submit_to_cluster --x=bar --y=delta