xargsを使用するとbash変数が消えるのはなぜですか?

xargsを使用するとbash変数が消えるのはなぜですか?

コマンドが呼び出される頻度を計算したい単純な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の質問は非常に似ています。。文法は<( )あなたの友人になることができます。

おすすめ記事