Tôi có một vấn đề trong một trong các kịch bản shell của tôi. Hỏi một vài đồng nghiệp, nhưng tất cả họ chỉ lắc đầu (sau vài lần gãi), vì vậy tôi đã đến đây để trả lời.
Theo hiểu biết của tôi, tập lệnh shell sau đây sẽ in "Đếm là 5" làm dòng cuối cùng. Ngoại trừ nó không. Nó in "Đếm là 0". Nếu "while read" được thay thế bằng bất kỳ loại vòng lặp nào khác, nó sẽ hoạt động tốt. Đây là kịch bản:
tiếng vang "1"> input.data tiếng vang "2" >> input.data tiếng vang "3" >> input.data tiếng vang "4" >> input.data tiếng vang "5" >> input.data CNT = 0 mèo đầu vào.data | trong khi đọc; làm hãy để CNT ++; tiếng vang "Đếm tới $ CNT" làm xong tiếng vang "Đếm là $ CNT"
Tại sao điều này xảy ra và làm thế nào tôi có thể ngăn chặn nó? Tôi đã thử điều này trong Debian Lenny và Squeeze, kết quả tương tự (ví dụ bash 3.2.39 và bash 4.1.5. Tôi hoàn toàn thừa nhận không phải là một trình hướng dẫn kịch bản shell, vì vậy mọi con trỏ đều được đánh giá cao.