Як вирватися з петлі у Bash?


150

Я хочу написати сценарій Bash, щоб обробити текст, який може потребувати певного циклу.

Наприклад, цикл часу на C:

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

Я хочу написати сценарій Bash, еквівалентний цьому. Але те, що я зазвичай використовував і як показали всі класичні приклади, які я читав, це:

while read something;
do
...
done

Він не пропонує ніякої допомоги щодо того, як це зробити, while(1){}і break;це добре визначено і широко використовується в C, і мені не потрібно читати дані для stdin.

Чи може хто-небудь допомогти мені з еквівалентом Баша вищевказаного коду С?

Відповіді:


189

Це не так різно в bash.

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

:- команда без операції; його вихідний статус завжди дорівнює 0, тому цикл працює до тих пір, поки не doneбуде задано ненульове значення.


Існує багато способів встановити і протестувати значення doneдля виходу з циклу; той, який я показую вище, повинен працювати в будь-якій сумісній з POSIX оболонці.


Це добре використовувати doneяк ім'я змінної? Це ключове слово оболонки ... Ніби не менш заплутане.
Майкл Дорст

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.