whileinteresitng sözdizimine sahiptir. Döngüden önce birden fazla komut koyabilirsiniz do ... whileve söz konusu durumun, aşağıdaki özel gereksinimlerinize bağlı olarak bu özelliği dengelemesi gerekebilir: en uzun dosyanın sonuna veya yalnızca en kısa dosyanın sonuna mı okuyorsunuz?
Örneğin, read || readsadece değil çalışır birinci dosyanın salt olduğunda becase, (Sorunun hükümlerine uygun olarak) true, ikinci dosyanın okuma edilir atlanır ilk dosya baştan sona okuma kadar Sonra ... statüsüne çünkü ise true, while döngüsü devam eder ve ikinci dosyayı baştan sona okur.
read && readyalnızca en kısa dosyaya kadar okumak istiyorsanız, dosyaları eşzamanlı olarak (eşzamanlı olarak) okuyacaktır. Ancak, her iki dosyayı da okumak istiyorsanız eof, while'ssözdizimi gereksinimleriyle çalışmanız gerekir . komutu ile hemen öncedo while , sıfır olmayan bir dönüş kodu üreten döngüsü sırasında döngünün patlak.
İşte her iki dosya nasıl okunacağı bir örnektir 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
(okumadan önce eof3 ve eof4'ü test etmek isteyebilirsiniz, ancak genel fikir, özellikle son doğru / yanlış durumda.
||benim için çalışmıyor. Bu süreç dosya1 sonra dosya2 , ancak senkronize dosyaları tutmak yapar&&çıkar, süre ilk sırasında döngü eof . - GNU bash 4.1.5