(2024-02-11 初稿)
Bashの while と for を利用していて、どうしてそのような仕様になっているのか、不思議なので記事にしてみた。
まずは、whileを使った無限ループは、以下のとおり。
なお、無限ループを抜けるのは、Ctrl+c(コントロールとcを同時に押す)で終わってね。
$ while true; do echo "test"; sleep 1; done
test
test
^C
一方、 for を使った無限ループは、以下のとおり。
$ for ((;;)); do echo "test"; sleep 1; done
test
test
^C
while、forともに同様に書ける。
しかし、do doneの代わりに、{}(ブレース)を使った場合は、以下のとおり。
$ while true; { echo "test"; sleep 1; }
> ^C
whileの場合は、文が終了しているとは認識されず、次の文の入力を求められる。
一方、forの場合は、{}(ブレース)を使っても、ちゃんと実行される。
$ for ((;;)) { echo "test"; sleep 1; }
test
test
^C
この違いは何なんだろう?
理由を知っている方は、ぜひ教えてください。
最後に、参考までに、forを使った3回実行する場合は、以下のとおり。
for ((i=0; i<3; ++i)) { echo "test"; sleep 1; }
test
test
test
今回は、whileとforで、なぜ仕様が異なるのか疑問に思っただけの記事だった。^^;