whileスコープ内で変数代入しても、ループを抜けるとその効果が消えてしまうのです。 何が困るかというと、while内でカウントアップしたいときに困ります。 #!/bin/bash COUNT=0 echo -e "a\nb\nc" | while read line do echo $line COUNT=$(expr $COUNT + 1) done echo $COUNT # 出力:0 ループを抜けた瞬間にカウンターはゼロになってしまいます。これは困る。 メカニズム なぜこうなってしまうのでしょうか? わかりやすい解説を見つけたので引用します。 それは while のせいではなくパイプ (|) のせいです。 「|」で多段に接続された各々のコマンドは別プロセスとして動きますので、そのいずれのプロセスも親である shell に変数を渡すことは出来ません。 パイプの場合、前段の実行が完了し