while
memiliki sintaksis interesitng. Anda dapat menempatkan beberapa perintah sebelum do ... while
loop, dan case yang dimaksud mungkin perlu menyulap fitur ini, tergantung pada persyaratan khusus Anda: apakah Anda membaca hingga akhir file terpanjang, atau hanya ke ujung yang terpendek.
Sebagai contoh, read || read
hanya tidak bekerja (sesuai kebutuhan pertanyaan ini), becase ketika membaca dari file pertama adalah true
, file kedua ini dibaca adalah dilewati sampai file pertama sudah dibaca dari awal sampai akhir ... Kemudian, karena status masih true
, loop sementara berlanjut dan membaca file kedua dari awal hingga selesai.
read && read
akan membaca file secara bersamaan (sinkron) jika Anda hanya ingin membaca sejauh file terpendek. Namun, jika Anda ingin membaca kedua file eof
, maka Anda harus bekerja dengan while's
persyaratan sintaks, yaitu. dengan perintah segera sebelum para do while
lingkaran menghasilkan kode kembali non-nol untuk keluar dari sementara loop.
Berikut adalah contoh cara membaca kedua file ke 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
(Anda mungkin ingin menguji eof3 dan eof4 sebelum membaca, tetapi gagasan umum ada di sana, terutama dalam kondisi benar / salah akhir.
||
tidak bekerja untuk saya. Ini memproses file1 kemudian file2 , tetapi itu tetap membuat file disinkronkan dengan&&
, yang keluar dari loop sementara setelah bukti pertama . - GNU bash 4.1.5