Nó được gọi là thay thế quá trình và là một tính năng của bash, zsh và ksh (và có thể cả những người khác, tôi không biết). Nó không phải là POSIX và bạn không nên sử dụng nó trong mã di động, nhưng nó rất hữu ích.
Đây là phần có liên quan của hướng dẫn bash:
3.5.6 Thay thế quy trình
Quá trình thay thế được hỗ trợ trên các hệ thống hỗ trợ các đường dẫn có tên (FIFO) hoặc phương thức / dev / fd để đặt tên các tệp đang mở. Nó có hình thức
<(list)
hoặc là
>(list)
Danh sách quy trình được chạy với đầu vào hoặc đầu ra của nó được kết nối với một tệp FIFO hoặc một số tệp trong / dev / fd. Tên của tệp này được truyền dưới dạng đối số cho lệnh hiện tại là kết quả của việc mở rộng. Nếu biểu mẫu> (danh sách) được sử dụng, ghi vào tệp sẽ cung cấp đầu vào cho danh sách. Nếu biểu mẫu <(danh sách) được sử dụng, tệp được truyền dưới dạng đối số sẽ được đọc để lấy đầu ra của danh sách. Lưu ý rằng không có khoảng trắng nào có thể xuất hiện giữa dấu ngoặc đơn <hoặc> và dấu ngoặc trái, nếu không cấu trúc sẽ được hiểu là chuyển hướng.
Khi có sẵn, quá trình thay thế được thực hiện đồng thời với mở rộng tham số và biến, thay thế lệnh và mở rộng số học.
git diff --no-index file1 <(cat file2)
sẽ thất bại với :error: /dev/fd/63: unsupported file type
. Bạn cũng có thể thấyerror: readlink("/dev/fd/63"): No such file or directory
nếu việc triển khai tạo ra một liên kết tượng trưng cho đường ống (vì một số lý do xuất hiện dưới dạng liên kết bị hỏng đối với tôi).