4

Bash で次のことを想定します。

declare -A ar='([one]="1" [two]="2" )'
declare -a ari='([0]="one" [1]="two")'
for i in ${!ari[@]}; do 
  echo $i ${ari[i]} ${ar[${ari[i]}]}
done
0 one 1
1 two 2

シーケンスではなく、連想配列のインデックスを使用することを確認して、GNU Parallel でも同じことができますか? 配列をエクスポートできないという事実は、不可能ではないにしても、これを困難にしますか?

4

3 に答える 3

1

GNU Parallel は perl プログラムです。perl プログラムが変数にアクセスできない場合、perl プログラムが変数を渡す方法がわかりません。

したがって、ループを並列化したい場合は、次の 2 つのオプションがあります。

declare -A ar='([one]="1" [two]="2" )'
declare -a ari='([0]="one" [1]="two")'
for i in ${!ari[@]}; do 
  sem -j+0 echo $i ${ari[i]} ${ar[${ari[i]}]}
done

このsemソリューションでは、混合出力を防ぐことはできません。

declare -A ar='([one]="1" [two]="2" )'
declare -a ari='([0]="one" [1]="two")'
for i in ${!ari[@]}; do 
  echo echo $i ${ari[i]} ${ar[${ari[i]}]}
done | parallel
于 2014-07-27T04:29:05.040 に答える