Bởi vì đó là cách nó có nghĩa là.
<(...)
trong bash
là cú pháp để thay thế quá trình. Nó được sao chép từ cùng một toán tử trong ksh
.
<
, (
, )
, |
, &
, ;
Là thẻ từ vựng đặc biệt trong bash
đó được sử dụng để tạo thành nhà khai thác đặc biệt trong các kết hợp khác nhau. <
, <(
, <<
, <&
... mỗi người đều có vai trò của họ. <
là để chuyển hướng. <file
, < file
sẽ chuyển hướng đầu vào từ một tập tin. <'(file)'
sẽ chuyển hướng đầu vào từ một tệp được gọi (file)
, nhưng <(file)
là một toán tử khác không phải là toán tử chuyển hướng.
< (file)
sẽ được <
theo sau (file)
. Trong bối cảnh đó, trong bash
, (file)
là không hợp lệ. (...)
có thể hợp lệ dưới dạng một mã thông báo trong một số ngữ cảnh như:
(sub shell)
func () {
...
}
var=(foo bar)
Nhưng không phải trong
sort < (cmd)
Trong fish
vỏ, nó khác. Trong fish
, (...)
là để thay thế lệnh (tương đương với $(...)
trong bash
). Và <
là để chuyển hướng đầu vào như trong shell giống như Bourne.
Vì vậy, trong fish
:
sort <(echo file)
sẽ giống như:
sort < (echo file)
Đó là:
sort < file
Nhưng đó là một cái gì đó hoàn toàn khác với bash
quá trình thay thế.
Trong hệ yash
vỏ, một vỏ POSIX khác, <(...)
không phải để thay thế quy trình mà là để chuyển hướng quy trình
Trong đó,
sort <(ls -l)
Viết tắt của:
sort 0<(ls -l)
là một toán tử chuyển hướng. Nó ít nhiều tương đương với:
ls -l | sort
Trong khi ở bash
, đường <(ls -l)
được mở rộng thành đường ống, vì vậy nó giống như:
ls -l | sort /dev/fd/0
Trong zsh
, (...)
bị quá tải như một toán tử toàn cầu ( (*.txt|*.png)
sẽ mở rộng đến txt
và png
các tệp) và như là vòng loại toàn cầu ( *(/)
ví dụ: mở rộng sang các tệp thư mục).
Trong zsh
, trong:
sort < (ls -l)
Điều đó (ls -l)
sẽ được coi là một vòng loại toàn cầu. Vòng l
loại toàn cầu sẽ khớp với số lượng liên kết và mong đợi một số sau l
(như trong ls -ld ./*(l2)
danh sách các tệp có 2 liên kết), vì vậy đó là lý do tại sao bạn gặp zsh: number expected
lỗi ở đó.
sort < (w)
zsh: no matches found: (w)
thay vào đó sẽ đưa ra một lỗi thay vì (w)
khớp với các tệp có tên trống có thể ghi.
sort < (w|cat)
sẽ sắp xếp nội dung của các tập tin w
và / hoặc cat
trong thư mục hiện tại ...