Çünkü öyle olması gerekiyordu.
<(...)
içinde bash
işlem değiştirme sözdizimi var. İçindeki aynı operatörden kopyalandı ksh
.
<
, (
, )
, |
, &
, ;
Özel sözcük belirteçleri olan bash
farklı kombinasyonlarda özel operatörler oluşturmak için kullanılır. <
, <(
, <<
, <&
... her biri kendi rolü vardır. <
yönlendirme içindir. <file
, < file
girdiyi bir dosyadan yönlendirir. <'(file)'
girişi bir dosyadan yönlendirir (file)
, ancak <(file)
yönlendirme operatörü olmayan farklı bir operatördür.
< (file)
<
takip ederdi (file)
. Bu bağlamda, içinde bash
, (file)
geçerli değil. (...)
gibi bazı bağlamlarda tek bir simge olarak geçerli olabilir:
(sub shell)
func () {
...
}
var=(foo bar)
Ama içinde değil
sort < (cmd)
In fish
kabuk, durum farklı. Olarak fish
, (...)
komut ikame (eşdeğer için $(...)
de bash
). Ve <
Bourne benzeri kabuklarda gibi girdi yönlendirme içindir.
Yani içinde fish
:
sort <(echo file)
aynı olurdu:
sort < (echo file)
Yani:
sort < file
Fakat bu, bash
işlemin ikamesinden tamamen farklı bir şey .
Olarak yash
kabuk, bir POSIX kabuğu <(...)
için değil işlem ikame ama için işlem yönlendirme
Orada,
sort <(ls -l)
İçin kısa:
sort 0<(ls -l)
bir yönlendirme operatörüdür. Bu aşağı yukarı eşdeğerdir:
ls -l | sort
İken bash
, <(ls -l)
bu yüzden bir daha gibi, bir borunun yoluna genişletilir:
ls -l | sort /dev/fd/0
İçinde zsh
, (...)
bir genelleme işleci olarak ( (*.txt|*.png)
genişler txt
ve png
dosyalar *(/)
genişler ) ve glob niteleyicisi ( örneğin, dizin dosyalarına genişler ) aşırı yüklenir .
İçinde zsh
, içinde:
sort < (ls -l)
Bu (ls -l)
bir glob niteleyicisi olarak değerlendirilir. l
Bağlantıların sayısına maç için ve sonra bir sayı bekliyor eleme glob l
(olduğu gibi ls -ld ./*(l2)
, 2 bağlantıları olan dosyaları listelemek olurdu) böylece eğer bir olsun neden en zsh: number expected
hatayı orada.
sort < (w)
zsh: no matches found: (w)
bunun yerine (w)
, yazılabilir boş addaki dosyalarla eşleşmesi yerine bir hata vermiş olur .
sort < (w|cat)
Geçerli dizindeki w
ve / veya cat
dosyaların içeriğini sıralardı ...