Làm thế nào để thoát ra khỏi một vòng lặp trong Bash?


150

Tôi muốn viết một tập lệnh Bash để xử lý văn bản, có thể cần một vòng lặp while.

Ví dụ: một vòng lặp while trong C:

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

Tôi muốn viết một kịch bản Bash tương đương với điều đó. Nhưng những gì tôi thường sử dụng và như tất cả các ví dụ kinh điển tôi đọc đã chỉ ra, là đây:

while read something;
do
...
done

Nó không cung cấp trợ giúp về cách làm while(1){}break;, được xác định rõ và được sử dụng rộng rãi trong C, và tôi không phải đọc dữ liệu cho stdin.

Bất cứ ai có thể giúp tôi với một Bash tương đương với mã C ở trên?

Câu trả lời:


189

Nó không khác biệt lắm đâu bash.

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

:là lệnh no-op; trạng thái thoát của nó luôn là 0, vì vậy vòng lặp chạy cho đến khi doneđược đưa ra một giá trị khác không.


Có nhiều cách bạn có thể thiết lập và kiểm tra giá trị của doneđể thoát khỏi vòng lặp; cái tôi hiển thị ở trên sẽ hoạt động trong mọi shell tương thích POSIX.


Sử dụng donenhư một tên biến? Đó là một từ khóa shell ... Ít nhất là khó hiểu.
Michael Dorst

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.