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.