Hanya dengan menambahkan jawaban baik @ jw013, mungkin membantu untuk menyadari bahwa itu sama dengan
{
cat -n
cat -n
} < infile
< filemenjadi kependekan 0< file, yaitu menggunakan file descriptor 0 bukannya 3.
Dan sedikit membingungkan masalah ini, versi ini:
exec 3< infile
cat -n /dev/fd/3
cat -n /dev/fd/3
Berperilaku berbeda tergantung pada OS Anda menjalankannya di dan jenis dari infile(file biasa vs pipa vs perangkat ...)
Pada Solaris dan sebagian besar Unices komersial, suatu open("/dev/fd/3")kurang lebih setara dengan a dup(3)(begitu < /dev/fd/3juga dengan <&3), sementara di Linux, untuk file biasa, /dev/fd/3diimplementasikan sebagai symlink ke file asli, jadi open("/dev/fd/3")bukalah lagi dari awal ( dan mungkin dengan flag berbeda dari fd 3).