Çünkü öyle olması gerekiyordu.
<(...)içinde bashişlem değiştirme sözdizimi var. İçindeki aynı operatörden kopyalandı ksh.
<, (, ), |, &, ;Özel sözcük belirteçleri olan bashfarklı kombinasyonlarda özel operatörler oluşturmak için kullanılır. <, <(, <<, <&... her biri kendi rolü vardır. <yönlendirme içindir. <file, < filegirdiyi 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 fishkabuk, 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, bashişlemin ikamesinden tamamen farklı bir şey .
Olarak yashkabuk, 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 txtve pngdosyalar *(/)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. lBağ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 expectedhatayı 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 wve / veya catdosyaların içeriğini sıralardı ...