Jak wyrwać się z pętli w Bashu?


150

Chcę napisać skrypt Bash do przetwarzania tekstu, co może wymagać pętli while.

Na przykład pętla while w C:

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

Chcę napisać odpowiednik tego skryptu w Bash. Ale to, czego zwykle używałem i jak pokazały wszystkie klasyczne przykłady, które przeczytałem, to:

while read something;
do
...
done

Nie oferuje żadnej pomocy, jak to zrobić while(1){}i break;, co jest dobrze zdefiniowane i szeroko stosowane w C, i nie muszę czytać danych dla stdin.

Czy ktoś mógłby mi pomóc z odpowiednikiem Bash powyższego kodu C?

Odpowiedzi:


189

Nie jest tak inaczej bash.

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

:jest poleceniem no-op; jego kod wyjścia zawsze wynosi 0, więc pętla działa, dopóki donenie otrzyma wartości niezerowej.


Jest wiele sposobów na ustawienie i przetestowanie wartości donew celu wyjścia z pętli; ten, który pokazałem powyżej, powinien działać w dowolnej powłoce zgodnej z POSIX.


Czy można używać donejako nazwy zmiennej? To słowo kluczowe powłoki ... przynajmniej trochę mylące.
Michael Dorst

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.