Тому що так мається бути.
<(...)
в bash
- це синтаксис заміщення процесу. Він скопійований з того самого оператора в ksh
.
<
, (
, )
, |
, &
, ;
Спеціальні лексичні маркери в bash
які використовуються для формування спеціальних операторів в різних комбінаціях. <
, <(
, <<
, <&
... кожен має свою роль. <
призначений для перенаправлення. <file
, < file
буде перенаправляти введення з файлу. <'(file)'
буде перенаправляти вхід з файла, який називається (file)
, але <(file)
це інший оператор, який не є оператором перенаправлення.
< (file)
буде <
слідувати (file)
. У цьому контексті, в bash
, (file)
не вірно. (...)
може бути дійсним як один маркер у деяких контекстах, таких як:
(sub shell)
func () {
...
}
var=(foo bar)
Але не в
sort < (cmd)
У fish
шкаралупі все інакше. В fish
, (...)
призначений для підстановки команд (еквівалент $(...)
в bash
). І <
призначений для перенаправлення вводу, як у оболонок, подібних до Борна.
Так у fish
:
sort <(echo file)
буде те саме, що:
sort < (echo file)
Це є:
sort < file
Але це щось зовсім інше, ніж bash
процес заміщення Росії.
В yash
оболонці, інший POSIX оболонка, <(...)
не для заміщення процесу , але і для перенаправлення процесу
Там,
sort <(ls -l)
Короткий термін для:
sort 0<(ls -l)
є оператором перенаправлення. Це більш-менш еквівалентно:
ls -l | sort
Перебуваючи в bash
, <(ls -l)
розгорнуто до шляху труби, тож це більше схоже на:
ls -l | sort /dev/fd/0
В zsh
, (...)
перевантажений як оператор будуються по ( (*.txt|*.png)
буде розширюватися txt
і png
файли) , а також Глоб класифікатором ( *(/)
наприклад , розширюється до файлів каталогу).
В zsh
, в:
sort < (ls -l)
Це (ls -l)
трактується як глобальний класифікатор. l
Глоб класифікатор повинен відповідати за кількістю посилань і очікує , що число після l
(як ls -ld ./*(l2)
би список файлів з 2 посилання), так ось чому ви отримаєте zsh: number expected
помилку там.
sort < (w)
zsh: no matches found: (w)
натомість дав би помилку як (w)
збіг файлів із порожнім ім'ям, які можна записати.
sort < (w|cat)
сортував би вміст w
та / або cat
файлів у поточному каталозі ...