Karena memang begitulah seharusnya.
<(...)
in bash
adalah sintaks untuk substitusi proses. Ini disalin dari operator yang sama di ksh
.
<
, (
, )
, |
, &
, ;
Adalah token leksikal khusus di bash
yang digunakan untuk membentuk operator khusus dalam kombinasi yang berbeda. <
, <(
, <<
, <&
... masing-masing memiliki peran mereka. <
adalah untuk pengalihan. <file
, < file
akan mengarahkan input dari file. <'(file)'
akan mengarahkan input dari file yang dipanggil (file)
, tetapi <(file)
merupakan operator berbeda yang bukan merupakan operator redirection.
< (file)
akan <
diikuti oleh (file)
. Dalam konteks itu, dalam bash
, (file)
tidak valid. (...)
dapat valid sebagai token tunggal dalam beberapa konteks seperti:
(sub shell)
func () {
...
}
var=(foo bar)
Tapi tidak di
sort < (cmd)
Dalam fish
shell, ini berbeda. In fish
, (...)
adalah untuk substitusi perintah (setara dengan $(...)
in bash
). Dan <
untuk pengalihan input seperti di shell Bourne-like.
Jadi di fish
:
sort <(echo file)
akan sama dengan:
sort < (echo file)
Itu adalah:
sort < file
Tapi itu sesuatu yang sama sekali berbeda dari bash
proses substitusi.
Dalam yash
shell, shell POSIX lain, <(...)
bukan untuk substitusi proses tetapi untuk pengalihan proses
Di sana,
sort <(ls -l)
Pendek untuk:
sort 0<(ls -l)
adalah operator pengalihan. Ini kurang lebih setara dengan:
ls -l | sort
Sementara di bash
, <(ls -l)
diperluas ke jalur pipa, jadi itu lebih seperti:
ls -l | sort /dev/fd/0
Dalam zsh
, (...)
kelebihan beban sebagai operator globbing ( (*.txt|*.png)
akan diperluas ke txt
dan png
file) dan sebagai kualifikasi glob ( *(/)
misalnya diperluas ke file direktori).
Di zsh
, di:
sort < (ls -l)
Itu (ls -l)
akan diperlakukan sebagai kualifikasi glob. The l
gumpal kualifikasi adalah untuk mencocokkan pada jumlah link dan mengharapkan angka setelah l
(seperti dalam ls -ld ./*(l2)
akan daftar file dengan 2 link), sehingga ini mengapa Anda mendapatkan zsh: number expected
kesalahan di sana.
sort < (w)
akan memberikan zsh: no matches found: (w)
kesalahan sebagai gantinya (w)
cocok dengan file dengan nama kosong yang dapat ditulisi.
sort < (w|cat)
akan mengurutkan konten w
dan / atau cat
file di direktori saat ini ...