我有两个列表
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
以嵌套方式对两个列表进行迭代是否是有效执行此操作的最佳方法?
答案 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