while
possui uma sintaxe de interação. Você pode colocar vários comandos antes do do ... while
loop, e o caso em questão pode precisar manipular esse recurso, dependendo dos requisitos específicos de: você lê o final do arquivo mais longo ou apenas o final do mais curto?
Por exemplo, read || read
simplesmente não funciona (conforme os requisitos da pergunta), pois quando uma leitura do primeiro arquivo é true
, a leitura do segundo arquivo é ignorada até que o primeiro arquivo seja lido do início ao fim ... Então, porque o status ainda é true
, o loop while continua e lê o segundo arquivo do início ao fim.
read && read
lerá os arquivos simultaneamente (de forma síncrona) se você quiser apenas ler o arquivo mais curto. No entanto, se você quiser ler os dois arquivos eof
, precisará trabalhar com os while's
requisitos de sintaxe, por exemplo. pelo comando imediatamente antes do do while
loop, produzindo um código de retorno diferente de zero para interromper o loop while.
Aqui está um exemplo de como ler os dois arquivos no 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
(você pode testar eof3 e eof4 antes da leitura, mas a ideia geral está lá, especialmente na condição final verdadeiro / falso.
||
não funciona para mim. Ele processar file1 então file2 , mas ele faz manter os arquivos sincronizados com&&
, que sai do enquanto ciclo após a primeira EOF . - GNU bash 4.1.5