Denn so soll es sein.
<(...)
in bash
ist die Syntax für die Prozessersetzung. Es wurde vom selben Operator in kopiert ksh
.
<
, (
, )
, |
, &
, ;
Sind spezielle lexikalische Token in bash
denen verwendet werden , in verschiedenen Kombinationen spezielle Operatoren zu bilden. <
, <(
, <<
, <&
... haben jeweils ihre Rolle. <
ist für die Umleitung. <file
, < file
wü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 fish
Shell 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 bash
die Prozessersetzung.
In der yash
Shell 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 txt
und png
Dateien 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 l
Glob-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 expected
wird 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 w
und / oder cat
Dateien im aktuellen Verzeichnis sortiert ...