Là cho ((Khác)) {Hoài;} một cú pháp shell hợp lệ? Trong vỏ nào?


21

Lời khuyên:

$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4

hoạt động chính xác.

Tôi không tìm thấy mô tả của cú pháp này trong đó {...;}thay thế ; do ...; donetrong hướng dẫn.

Có một tài liệu tham khảo trong hướng dẫn? Đối với vỏ nào làm việc đó chính xác?


Câu trả lời:


30

{ ...; }đã được chấp nhận ở vị trí của do ...; donetrong forvòng trong phiên bản đầu tiên của Bourne shell trong Unix V7 vào cuối thập niên 70 (xem mã nguồn ) mặc dù chưa bao giờ ghi nhận như xa như tôi biết.

Tất cả ksh(cả bản gốc có nguồn gốc từ vỏ Bourne và viết lại ksh93), pdksh¹ (và các dẫn xuất), bash(từ đầu năm 1989) và zshhỗ trợ nó. Tôi không biết bất kỳ ashdẫn xuất nào. yashkhông phải nhưng yashđược viết theo tiêu chuẩn POSIX.

Trong zsh, hỗ trợ đã được thêm vào 2.0 vào năm 1991, nhưng là một phần của một loạt các biểu mẫu ngắn mới cho hầu hết các cấu trúc vượt ra ngoài cú pháp Bourne. Không chỉ for i in 1 2; { ...; }, nó for i in 1 2; any-command(và các biến thể của chúng). Và nó được ghi nhận ở đókể từ khi được giới thiệu .

AFAIK, bên cạnh zsh, chỉ có tài liệu pdksh nó (cho cả hai forselect).

Đối với các ((init; condition; action))hình thức, đó đến từ ksh93và được sao chép bởi zshbash.

Không phải cái đó ((...))cũng không phải là { ...; }vị trí của do ...; donePOSIX.

Xem thêm Mục đích của từ khóa "làm" trong Bash cho các vòng lặp là gì? cho nhiều fordạng vòng lặp hơn .


Không phải các phiên bản trước đó, cũng không phải vỏ Forsyth mà nó dựa trên. Nó đã được thêm vào 5.1.1 năm 1994 và điều đó có thể giải thích tại sao nó trở thành tài liệu ở đó


1
Ồ, ông Bourne hoàn toàn chấp nhận việc sử dụng bộ tiền xử lý c trong mã nguồn của thập niên 70 đó.
Chấn thương kỹ thuật số
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.