Apenas para adicionar à boa resposta de @ jw013, pode ajudar a perceber que é o mesmo que
{
cat -n
cat -n
} < infile
< filesendo curto 0< file, use o descritor de arquivo 0 em vez de 3.
E apenas para confundir um pouco o assunto, esta versão:
exec 3< infile
cat -n /dev/fd/3
cat -n /dev/fd/3
Comporta-se de maneira diferente, dependendo do sistema operacional em que você o executa e do tipo de infile(arquivo normal x pipe x dispositivo ...)
No Solaris e a maioria dos Unices comerciais, um open("/dev/fd/3")é mais ou menos equivalente a um dup(3)(assim < /dev/fd/3é aproximadamente o mesmo que <&3), enquanto no Linux, para arquivos regulares, /dev/fd/3é implementado como um link simbólico para o arquivo original, então open("/dev/fd/3")a abre de novo desde o início ( e possivelmente com bandeiras diferentes do fd 3).