web-dev-qa-db-ja.com

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

Whileループを必要とする可能性のあるテキストを処理するBashスクリプトを作成したい。

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

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

それと同等のBashスクリプトを書きたいです。しかし、私が普段使っているのは、私が読んだすべての古典的な例が示しているように、これです:

while read something;
do
...
done

while(1){}およびbreak;の実行方法については何の助けもありません。これは、Cで適切に定義され、広く使用されており、stdinのデータを読み取る必要はありません。

上記のCコードに相当するBashで誰かが私を助けることができますか?

109
lulyon

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

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

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


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

144
chepner
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
48
lurker