Chỉ cần thêm vào câu trả lời hay của @ jw013, có thể giúp nhận ra rằng nó giống như
{
cat -n
cat -n
} < infile
< file
viết tắt của 0< file
, đó là sử dụng mô tả tệp 0 thay vì 3.
Và chỉ để nhầm lẫn một chút, phiên bản này:
exec 3< infile
cat -n /dev/fd/3
cat -n /dev/fd/3
Xử lý khác nhau tùy thuộc vào hệ điều hành bạn chạy nó trong và loại của infile
(tập tin thường xuyên vs ống vs thiết bị ...)
Trên Solaris và hầu hết các Unice thương mại, một open("/dev/fd/3")
hoặc ít hơn tương đương với một dup(3)
( < /dev/fd/3
tương tự như <&3
), trong khi trên Linux, đối với các tệp thông thường, /dev/fd/3
được triển khai như một liên kết tượng trưng cho tệp gốc, do đó, open("/dev/fd/3")
mở lại từ đầu ( và có thể với các cờ khác nhau từ fd 3).