コマンドが呼び出される頻度を計算したい単純なbashスクリプトがあります。以下は最小限の例です。カウンターはcと呼ばれ、最後に4にする必要があります。
#!/bin/bash
c=0;
for a in X Y; do
for b in 1 2; do
c="$(( ${c} + 1 ))"
echo "${a}${b}"
done #| xargs -L 1 -P 20 echo
echo "count $c"
done
echo "--"
echo "final $c"
xargsなしでうまく機能しますが(final = 4)、xargsへのパイプのコメントアウトを削除すると、何もないと計算されます(final = 0)。なぜ?
Expected output: | This happens with xargs:
X1 | X1
X2 | X2
count 2 | count 0
Y1 | Y1
Y2 | Y2
count 4 | count 0
-- | --
final 4 | final 0
答え1
パイピングは、forループがサブシェルで発生し、$ cをプログラムの残りの部分に戻さないことを意味します。パイプなしで書き直す必要があります。 このStackOverflowの質問は非常に似ています。。文法は<( )
あなたの友人になることができます。