使用数组来输入GNU parallel?

13

如何使用数组在GNU parallel中传递命令?例如,我有以下数组:

x=(0.1 0.2 0.5)

现在我想将其提供给parallel中的某个命令执行

parallel echo ::: $x

这个不起作用。它把所有参数都传递给了单个调用,因为它打印出来了。

0.1 0.2 0.5

取代

0.1
0.2
0.5

它是...的输出

parallel echo ::: 0.1 0.2 0.5

我该如何正确地做呢?

2个回答

15

如果您想使用数组中的所有元素,请使用以下代码:

parallel echo ::: ${x[@]}

8
如果未来数组元素中包含空格,建议使用"${x[@]}",例如:x=("0.1 + 6" "0.2 - b" "0.5 + a")。请注意,这句话不需要解释或添加其他内容。 - Mark Setchell

5

来源: http://www.gnu.org/software/parallel/man.html

示例:使用shell变量

当使用shell变量时,您需要正确引用它们,否则它们可能会在空格上被拆分。

请注意以下区别:

V=("My brother's 12\" records are worth <\$\$\$>"'!' Foo Bar)
parallel echo ::: ${V[@]} # This is probably not what you want

并且:

V=("My brother's 12\" records are worth <\$\$\$>"'!' Foo Bar)
parallel echo ::: "${V[@]}"

在实际命令中使用变量时,如果包含特殊字符(例如空格),可以使用'"$VAR"'或使用"'s和-q进行引用:

V="Here  are  two "
parallel echo "'$V'" ::: spaces
parallel -q echo "$V" ::: spaces

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接