我想迭代 bash 中的成对元素。在 Python 中,这很简单:
x_list = [1, 2, 3, 4]
y_list = ["a", "b", "c", "d"]
for x, y in zip(x_list , y_list):
# here we have access to the values (i.e. the pairs are assigned to variables):
result = do_something(x, y)
print(result)
Run Code Online (Sandbox Code Playgroud)
我如何在 bash 中复制这种行为?我需要将这些对的值存储到 for 循环内部的变量中,以便我可以执行一些操作。它应该是这样的:
for x, y in 1a 2b 3c 4d
do
python script.py --x_value=${x} --y_value=${y}
done
Run Code Online (Sandbox Code Playgroud)
请注意,列表的元素也可能是复杂的东西,例如:
x_list = [1e-5, 1e-4, 1e-3]和y_list = [10, 20, 30]
您的代码的可能翻译是:
#!/bin/bash
x_list=(1 2 3 4)
y_list=(a b c d)
for i in "${!x_list[@]}"
do
x=${x_list[i]}
y=${y_list[i]}
printf '%q %q\n' "$x" "$y"
done
Run Code Online (Sandbox Code Playgroud)
1 a
2 b
3 c
4 d
Run Code Online (Sandbox Code Playgroud)
但它依赖于这样一个事实:两个新创建的数组将具有相同的索引。这是问题的说明:
1 a
2 b
3 c
4 d
Run Code Online (Sandbox Code Playgroud)
2 ''
3 c
4 d
Run Code Online (Sandbox Code Playgroud)