如何使用数组在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
我该如何正确地做呢?
如何使用数组在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
我该如何正确地做呢?
如果您想使用数组中的所有元素,请使用以下代码:
parallel echo ::: ${x[@]}
来源: 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
"${x[@]}"
,例如:x=("0.1 + 6" "0.2 - b" "0.5 + a")
。请注意,这句话不需要解释或添加其他内容。 - Mark Setchell