Quando você diz: read var <file
, o descritor de arquivo é fechado quando o comando é concluído. Assim, da próxima vez no loop, o descritor de arquivo é redefinido para o início.
No caso de exec 3<file
, quando você diz read -r -u 3 var
, o descritor de arquivo permanece aberto mesmo quando o comando read termina E a posição de leitura é atualizada, então na próxima vez, a leitura irá pegar a próxima linha. p>
Observação: mesmo se você tivesse feito, exec 0<file
e, em seguida, read -r var
, ainda se comportaria de maneira semelhante.