GNU Parallel:如何引用数组元素?

GNU Parallel:如何引用数组元素?

这是我的案例场景:

luis@Balanceador:~$ echo ${array[@]}
a b
luis@Balanceador:~$ echo ${array[1]}
a
luis@Balanceador:~$ echo ${array[2]}
b
luis@Balanceador:~$ parallel echo ${array[]} ::: 1 2
-bash: ${array[]}: bad substitution
luis@Balanceador:~$ parallel echo ${array[{}]} ::: 1 2
-bash: {}: syntax error: operand expected (error token is "{}")
luis@Balanceador:~$ parallel echo ${array[{1}]} ::: 1 2
-bash: {1}: syntax error: operand expected (error token is "{1}")
luis@Balanceador:~$ parallel echo ${array[{#}]} ::: 1 2
-bash: {#}: syntax error: operand expected (error token is "{#}")

如何在 GNU Parallel 上引用某些数组的各个元素?

当然,这很简单,但我在手册上找不到它。

这个问题已经回答了这个其他,但是,问完之后,我认为这是两个不同的问题。

答案1

虽然看起来很容易,但实际上非常难。

由 GNU Parallel 启动的作业不会在运行 GNU Parallel 的同一 shell 内启动。所以它看起来像这样:

bash[1]---perl(running parallel)---bash[2]

$array 在 bash[1] 中定义,但您想在 bash[2] 中使用它。这是不可能完全做到的(即如果你想对数组进行写访问),但我们做一个复制可用的$array:

env_parallel 'echo ${array[{}]}' ::: 1 2

env_parallel(在 GNU Parallel 20140822 中引入)将 bash[1] 的整个环境复制到 bash[2](因此您的环境必须有点小),在作业运行之前启动它。

env_parallel非常不稳定,所以如果您发现错误,请报告它们。

相关内容