如何使用 ::: 将两个数组的元素传递给并行命令

How to pass elements of two arrays to a parallel command with :::

我正在尝试 运行 多个 python 命令与并行命令并行。

我尝试使用并行命令,但它的表现不如我预期

这是我的 shell 脚本

arr_1=(a.log b.log c.log d.log)
arr_2=(a.json b.json c.json d.json)
parallel --halt 2 echo "{1} {2}" ::: "${arr_1[@]}" ::: ${arr_2{@}}

我的预期是:

a.log a.json
b.log b.json
c.log c.json
d.log d.json

但我得到的是:

a.log a.json
b.log b.json
c.log c.json
d.log d.json
a.log a.json
b.log b.json
c.log c.json
d.log d.json
a.log a.json
b.log b.json
c.log c.json
d.log d.json
a.log a.json
b.log b.json
c.log c.json
d.log d.json

看起来像shell脚本运行命令16次。

我的猜测是我没有正确传递两个列表,但我不确定。

您正在寻找:::+

parallel --halt 2 echo "{1} {2}" ::: "${arr_1[@]}" :::+ ${arr_2[@]}

从 20160422 开始可用。