whilema interesującą składnię. Możesz umieścić wiele poleceń przed do ... whilepętlą, a sprawa może wymagać żonglowania tą funkcją, w zależności od twoich szczególnych wymagań: czytasz do końca najdłuższego pliku, czy tylko do końca najkrótszego.
Na przykład read || readpo prostu nie działa (zgodnie z wymaganiami pytania), ponieważ gdy czytany jest pierwszy plik true, odczyt drugiego pliku jest pomijany, dopóki pierwszy plik nie zostanie odczytany od początku do końca ... Wtedy, ponieważ status jest nadal true, pętla while trwa i odczytuje drugi plik od początku do końca.
read && readodczyta pliki jednocześnie (synchronicznie), jeśli chcesz tylko czytać do najkrótszego pliku. Jeśli jednak chcesz odczytać oba pliki eof, musisz pracować z while'swymaganiami składni, tj. przez polecenie bezpośrednio przeddo while pętli wytwarzania niezerowy kod zwrotny, aby wydostać się z pętli while.
Oto przykład, jak czytać oba pliki do 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
(możesz chcieć przetestować eof3 i eof4 przed odczytem, ale ogólna idea istnieje, szczególnie w końcowym stanie prawda / fałsz.
||nie działa dla mnie Jest w stanie przetworzyć plik1 następnie file2 , ale robi zachować pliki zsynchronizowane z&&, co wychodzi z while pętli podczas pierwszego EOF . - GNU bash 4.1.5