Denn so soll es sein.
<(...)in bashist die Syntax für die Prozessersetzung. Es wurde vom selben Operator in kopiert ksh.
<, (, ), |, &, ;Sind spezielle lexikalische Token in bashdenen verwendet werden , in verschiedenen Kombinationen spezielle Operatoren zu bilden. <, <(, <<, <&... haben jeweils ihre Rolle. <ist für die Umleitung. <file, < filewürde Eingaben aus einer Datei umleiten. <'(file)'würde Eingaben aus einer aufgerufenen Datei umleiten (file), ist aber <(file)ein anderer Operator, der kein Umleitungsoperator ist.
< (file)würde <gefolgt von (file). In diesem Zusammenhang in bash, (file)ist nicht gültig. (...)kann in einigen Kontexten als einzelnes Token gültig sein, z.
(sub shell)
func () {
...
}
var=(foo bar)
Aber nicht in
sort < (cmd)
In der fishShell ist es anders. In fish, (...)ist für die Befehlssubstitutions (das Äquivalent von $(...)in bash). Und <ist für die Eingabeumleitung wie in Bourne-ähnlichen Shells.
Also in fish:
sort <(echo file)
wäre das gleiche wie:
sort < (echo file)
Das ist:
sort < file
Aber das ist etwas völlig anderes als bashdie Prozessersetzung.
In der yashShell dient eine andere POSIX-Shell <(...)nicht der Prozessersetzung, sondern der Prozessumleitung
Da drin,
sort <(ls -l)
Kurz für:
sort 0<(ls -l)
ist ein Umleitungsoperator. Es ist mehr oder weniger gleichbedeutend mit:
ls -l | sort
Während Sie sich in befinden bash, <(ls -l)wird der Pfad auf den Pfad einer Pipe erweitert.
ls -l | sort /dev/fd/0
In zsh, (...)ist als Globbing-Operator ( (*.txt|*.png)würde zu txtund pngDateien erweitern) und als Glob-Qualifier (wird *(/)zum Beispiel zu Verzeichnisdateien erweitert ) überladen .
In zsh, in:
sort < (ls -l)
Das (ls -l)würde als Glob Qualifier behandelt. Das lGlob-Qualifikationsmerkmal muss mit der Anzahl der Verknüpfungen übereinstimmen und erwartet eine Zahl danach l(wie in ls -ld ./*(l2)der Liste der Dateien mit 2 Verknüpfungen). Daher zsh: number expectedwird dort eine Fehlermeldung angezeigt.
sort < (w)hätte zsh: no matches found: (w)stattdessen einen Fehler ausgegeben, da er (w)mit den Dateien mit leerem Namen übereinstimmt, die beschreibbar sind.
sort < (w|cat)hätte den Inhalt der wund / oder catDateien im aktuellen Verzeichnis sortiert ...