这是我的案例场景:
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
非常不稳定,所以如果您发现错误,请报告它们。