【问题标题】:Feed GNU parallel with an array?用数组并行馈送 GNU?
【发布时间】:2016-07-02 18:17:38
【问题描述】:

如何在 GNU 中将命令与数组并行输入?例如,我有这个数组:

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

我怎样才能做到正确?

【问题讨论】:

    标签: arrays bash gnu-parallel


    【解决方案1】:

    如果要提供数组中的所有元素,请使用:

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

    【讨论】:

    • 我认为最好使用"${x[@]}",以防将来任何数组元素包含空格,例如x=("0.1 + 6" "0.2 - b" "0.5 + a")
    【解决方案2】:

    发件人: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多