<Trước | Nội dung | Tiếp theo>
cho: Dạng Shell truyền thống
Bản gốc cho cú pháp của lệnh là:
cho biến [trong từ]; làm
lệnh
thực hiện
Ở đâu biến là tên của một biến sẽ tăng lên trong quá trình thực hiện vòng lặp, từ là danh sách tùy chọn các mục sẽ được chỉ định tuần tự cho biếnvà lệnh là các lệnh sẽ được thực hiện trên mỗi lần lặp lại của vòng lặp.
cho lệnh hữu ích trên dòng lệnh. Chúng tôi có thể dễ dàng chứng minh cách nó hoạt động:
[tôi @ linuxbox ~] $ cho i trong ABCD; làm echo $ i; xong
A B C D
[tôi @ linuxbox ~] $ cho i trong ABCD; làm echo $ i; xong
A B C D
Trong ví dụ này, cho được đưa ra một danh sách gồm bốn từ: “A”, “B”, “C” và “D”. Với danh sách bốn từ, vòng lặp được thực hiện bốn lần. Mỗi khi vòng lặp được thực thi, một từ được ký vào biến i. Bên trong vòng lặp, chúng tôi có một bỏ lỡ lệnh hiển thị giá trị của i để hiển thị bài tập. Như với trong khi và cho đến khi vòng lặp, thực hiện key- từ đóng vòng lặp.
Tính năng thực sự mạnh mẽ của cho là số cách thú vị mà chúng ta có thể tạo danh sách các từ. Ví dụ, thông qua mở rộng dấu ngoặc nhọn:
[tôi @ linuxbox ~] $ cho tôi trong {A..D}; làm echo $ i; xong
A B C D
[tôi @ linuxbox ~] $ cho tôi trong {A..D}; làm echo $ i; xong
A B C D
hoặc mở rộng tên đường dẫn:
[tôi @ linuxbox ~] $ cho tôi trong bản phân phối * .txt; làm echo $ i; xong
distros-by-date.txt distros-date.txt distros-key-names.txt distros-key-vernums.txt distros-names.txt distros.txt
distros-vernums.txt distros-version.txt
[tôi @ linuxbox ~] $ cho tôi trong bản phân phối * .txt; làm echo $ i; xong
distros-by-date.txt distros-date.txt distros-key-names.txt distros-key-vernums.txt distros-names.txt distros.txt
distros-vernums.txt distros-version.txt
hoặc thay thế lệnh:
#! / bin / bash
# dài nhất-từ: tìm chuỗi dài nhất trong tệp while [[-n $ 1]]; làm
nếu [[-r $ 1]]; thì max_word = max_len = 0
cho tôi trong $ (chuỗi $ 1); do len = $ (echo -n $ i | wc -c)
if ((len> max_len)); thì max_len = $ len max_word = $ i
fi
thực hiện
echo "$ 1: '$ max_word' ($ max_len ký tự)"
thay đổi fi
thực hiện
#! / bin / bash
# dài nhất-từ: tìm chuỗi dài nhất trong tệp while [[-n $ 1]]; làm
nếu [[-r $ 1]]; thì max_word = max_len = 0
cho tôi trong $ (chuỗi $ 1); do len = $ (echo -n $ i | wc -c)
if ((len> max_len)); thì max_len = $ len max_word = $ i
fi
thực hiện
echo "$ 1: '$ max_word' ($ max_len ký tự)"
thay đổi fi
thực hiện
cho: Dạng Shell truyền thống
Trong ví dụ này, chúng tôi tìm kiếm chuỗi dài nhất được tìm thấy trong một tệp. Khi được cung cấp một hoặc nhiều tên tệp trên dòng lệnh, chương trình này sử dụng dây chương trình (được bao gồm trong gói GNU binutils) để tạo danh sách các “từ” văn bản có thể đọc được trong mỗi tệp. Các cho Vòng lặp xử lý lần lượt từng từ và xác định xem từ hiện tại có phải là từ dài nhất được tìm thấy cho đến nay hay không. Khi vòng lặp kết thúc, từ dài nhất được hiển thị.
Nếu tùy chọn in từ một phần của cho lệnh bị bỏ qua, cho mặc định để dự đoán các tham số vị trí. Chúng tôi sẽ sửa đổi từ dài nhất script để sử dụng phương pháp này:
#! / bin / bash
# long-word2: tìm chuỗi dài nhất trong tệp cho i; làm
nếu [[-r $ i]]; thì max_word = max_len = 0
for j in $ (string $ i); do len = $ (echo -n $ j | wc -c)
if ((len> max_len)); thì max_len = $ len max_word = $ j
fi
thực hiện
echo "$ i: '$ max_word' ($ max_len ký tự)"
xong rồi
#! / bin / bash
# long-word2: tìm chuỗi dài nhất trong tệp cho i; làm
nếu [[-r $ i]]; thì max_word = max_len = 0
for j in $ (string $ i); do len = $ (echo -n $ j | wc -c)
if ((len> max_len)); thì max_len = $ len max_word = $ j
fi
thực hiện
echo "$ i: '$ max_word' ($ max_len ký tự)"
xong rồi
Như chúng ta có thể thấy, chúng tôi đã thay đổi vòng lặp ngoài cùng để sử dụng cho Ở vị trí trong khi. Bằng cách bỏ qua danh sách các từ trong cho lệnh, các tham số vị trí được sử dụng thay thế. Bên trong vòng lặp, các phiên bản trước của biến i đã được thay đổi thành biến thể j. Việc sử dụng thay đổi cũng đã bị loại bỏ.
Tại sao lại là tôi?
Bạn có thể nhận thấy rằng biến i đã được chọn cho mỗi cho các ví dụ về vòng lặp ở trên. Tại sao? Không có lý do cụ thể thực sự, ngoài truyền thống. Biến được sử dụng với cho có thể là bất kỳ biến hợp lệ nào, nhưng i là phổ biến nhất, tiếp theo là j và k.
Cơ sở của truyền thống này đến từ ngôn ngữ lập trình Fortran. Trong For- tran, các biến chưa khai báo bắt đầu bằng các chữ cái I, J, K, L và M được nhập tự động dưới dạng số nguyên, trong khi các biến bắt đầu bằng bất kỳ chữ cái nào khác được nhập dưới dạng thực (số có phân số thập phân). Hành vi này khiến các lập trình viên sử dụng các biến I, J và K cho các biến vòng lặp, vì việc sử dụng chúng sẽ ít hơn khi cần một biến tạm thời (như các biến vòng lặp thường là).
Nó cũng dẫn đến thuyết phù thủy dựa trên Fortran sau đây: "GOD là có thật, trừ khi được khai báo là số nguyên."
<Trước | Nội dung | Tiếp theo>