189

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

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

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

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

while read something;
do
...
done

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

上記の C コードに相当する Bash を手伝ってくれる人はいますか?

4

2 に答える 2

245

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

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

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


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

于 2013-08-28T13:02:36.623 に答える
69
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
于 2013-08-28T13:02:35.363 に答える