Tại sao 'cho anytext; làm 'vòng lặp bốn lần?


9

Đây có phải là một lỗi hoặc một tính năng?
Nó dường như xảy ra đối với chữ và số không được trích dẫn .

Chạy bash GNU, phiên bản 4.1.5

for alpha01234; do echo $((++i)); done

đầu ra:

1
2
3
4

Câu trả lời:


14

Đó là một tính năng của forlệnh ghép, như được mô tả bởi help for:

for: for NAME [in WORDS ... ] ; do COMMANDS; done

Thực hiện các lệnh cho mỗi thành viên trong một danh sách.

Các forvòng lặp thực hiện một chuỗi các lệnh cho mỗi thành viên trong một danh sách các mục. Nếu in WORDS ...;không có mặt, thì in "$@"được giả định. Đối với mỗi phần tử trong WORDS, NAMEđược đặt thành phần tử đó và COMMANDSđược thực thi.

Vì vậy, mã bạn trích dẫn có thể được thực thi trong một tập lệnh được gọi với 4 tham số.


Cảm ơn ... Điều khiến tôi hoàn toàn ném nó là nó đã xảy ra ở dòng lệnh .. Tôi thực sự đã không thử nó trong một kịch bản .. Tôi phải sử dụng set a b c dmột thời gian gần đây. Tôi thường sử dụng setcách đó trong một kịch bản để kiểm tra .. Sau khi khởi động lại thiết bị đầu cuối, nó đã dừng lại ... (có ý nghĩa ngay bây giờ) ..
Peter.O

12

for x; do …là một phím tắt cho for x in "$@"; do …: nó lặp qua các tham số vị trí. Nếu nó lặp bốn lần, điều đó có nghĩa là bạn có bốn tham số vị trí ( $1thông qua $4).

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.