私のケースのシナリオは次のとおりです。
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でいくつかの配列の個々の要素を参照する方法は?
もちろん簡単ですが、マニュアルでは見つかりません。
この質問に回答しましたこの他しかし、尋ねた後、私は2つの異なる質問だと思います。
答え1
簡単に見えますが、実際には非常に難しいです。
GNU Parallel によって開始されたジョブは、GNU Parallel が実行されているのと同じシェル内で開始されません。したがって、次のようになります。
bash[1]---perl(running parallel)---bash[2]
$array は bash[1] で定義されていますが、これを bash[2] で使用したいと思います。完全に行うことは不可能ですが(配列への書き込みアクセスが必要な場合など)できる何かを作るコピー利用可能な$配列:
env_parallel 'echo ${array[{}]}' ::: 1 2
env_parallel
(GNU Parallel 20140822で導入されました)bash [1]の環境全体をbash [2]にコピーし(したがって、環境は少し小さくする必要があります)、ジョブが実行される前に開始します。
env_parallel
非常に不安定なので、バグを見つけたら報告してください。