Как вырваться из цикла в Bash?


150

Я хочу написать сценарий Bash для обработки текста, который может потребовать цикла while.

Например, цикл while в C:

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

Я хочу написать сценарий Bash, эквивалентный этому. Но то, что я обычно использовал и как показали все классические примеры, которые я прочитал, это:

while read something;
do
...
done

Он не предлагает никакой помощи о том , как делать while(1){}и break;, что хорошо определены и широко используется в C, и я не должен читать данные для стандартного ввода.

Может ли кто-нибудь помочь мне с Bash-эквивалентом приведенного выше кода C?

Ответы:


189

Это не так уж и отличается bash.

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

:команда no-op; его состояние выхода всегда равно 0, поэтому цикл выполняется до тех пор, doneпока ему не будет присвоено ненулевое значение.


Есть много способов установить и проверить значение done, чтобы выйти из цикла; тот, который я показываю выше, должен работать в любой POSIX-совместимой оболочке.


Это нормально использовать doneв качестве имени переменной? Это ключевое слово в оболочке ... По крайней мере, сбивает с толку.
Майкл Дорст

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.