ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

Bashのwhileとforの無限ループと{}(ブレース)への対応について

(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で、なぜ仕様が異なるのか疑問に思っただけの記事だった。^^;

 

関連ページ