GNUパラレル:配列要素を参照する方法は?

GNUパラレル:配列要素を参照する方法は?

私のケースのシナリオは次のとおりです。

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非常に不安定なので、バグを見つけたら報告してください。

おすすめ記事