bash(1) のマニュアルページによると、次を実行すると:
set -e
x=2
echo Start $x
while [ $((x--)) -gt 0 ]; do echo Loop $x; done | cat
echo End $x
出力は次のようになります。
Start 2
Loop 1
Loop 0
End 2
ループ (サブシェルとして実行) の後、変数 x は 2 にリセットされます。しかし、パイプを削除すると x が更新されます。
Start 2
Loop 1
Loop 0
End -1
x を変更する必要がありますが、パイプも必要です。この問題を回避する方法はありますか?