while
có một cú pháp interesitng. Bạn có thể đặt nhiều lệnh trước do ... while
vòng lặp và trường hợp được đề cập có thể cần phải xử lý tính năng này, tùy thuộc vào yêu cầu cụ thể của bạn về: bạn có đọc đến hết tệp dài nhất hay chỉ đến cuối tệp ngắn nhất.
Ví dụ, read || read
đơn giản là không hoạt động (theo yêu cầu của câu hỏi), vì khi đọc tệp đầu tiên true
, tệp thứ hai sẽ bị bỏ qua cho đến khi tệp đầu tiên được đọc từ đầu đến cuối ... Sau đó, vì trạng thái vẫn còn true
, vòng lặp while tiếp tục và đọc tệp thứ hai từ đầu đến cuối.
read && read
sẽ đọc các tệp đồng thời (đồng bộ) nếu bạn chỉ muốn đọc xa nhất là tệp ngắn nhất. Tuy nhiên, nếu bạn muốn đọc cả hai tệp eof
, thì bạn cần phải làm việc với while's
các yêu cầu cú pháp, tức là. bởi lệnh ngay lập tức trước khi các do while
vòng lặp tạo ra một mã trở lại khác không để thoát ra khỏi vòng lặp while.
Dưới đây là một ví dụ về cách đọc cả hai tệp vào eof
while IFS= read -r line3 <&3 || ((eof3=1))
IFS= read -r line4 <&4 || ((eof4=1))
!((eof3 & eof4))
do
echo "$line3, $line4"
done 3<file3 4<file4
(bạn có thể muốn kiểm tra eof3 và eof4 trước khi đọc, nhưng ý tưởng chung là có, đặc biệt là trong điều kiện đúng / sai cuối cùng.
||
không làm việc cho tôi. Nó xử lý file1 rồi file2 , nhưng nó giữ các tập tin đồng bộ với&&
, mà sẽ thoát khỏi trong khi vòng lặp khi đầu eof . - GNU bash 4.1.5