Bashのループから抜け出す方法は?


150

テキストを処理するBashスクリプトを記述したいのですが、whileループが必要になる場合があります。

たとえば、Cのwhileループ:

int done = 0;
while(1) {
  ...
  if(done) break;
}

それと同等のBashスクリプトを書きたいのですが。しかし、私が通常使用し、私が読んだすべての古典的な例が示したように、これは次のとおりです。

while read something;
do
...
done

よく定義され、Cで広く使用されているwhile(1){}との方法についてのヘルプはありbreak;ません。また、stdinのデータを読み取る必要はありません。

上記のCコードに相当するBashで誰かが私を助けてくれませんか?

回答:


189

でもそれほど違いはありませんbash

done=0
while : ; do
  ...
  if [ "$done" -ne 0 ]; then
      break
  fi
done

:no-opコマンドです。その終了ステータスは常に0であるため、ループはdoneゼロ以外の値が指定されるまで実行されます。


doneループを終了するために値を設定およびテストする方法はたくさんあります。上記で示したものは、POSIX互換シェルで動作するはずです。


done変数名として使用しても大丈夫ですか?これはシェルのキーワードです...少なくとも混乱を招くようなものです。
マイケルドースト

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.