while
ma interesującą składnię. Możesz umieścić wiele poleceń przed do ... while
pę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 || read
po 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 && read
odczyta 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's
wymaganiami 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