Parce que c'est comme ça que ça se passe.
<(...)in bashest la syntaxe pour la substitution de processus. Il est copié du même opérateur dans ksh.
<, (, ), |, &, ;Sont des jetons lexicaux spéciaux bashqui sont utilisés pour former des opérateurs spéciaux dans différentes combinaisons. <, <(, <<, <&... ont chacun leur rôle. <est pour la redirection. <file, < fileredirigerait l’entrée d’un fichier. <'(file)'redirige l'entrée d'un fichier appelé (file), mais <(file)est un opérateur différent qui n'est pas un opérateur de redirection.
< (file)serait <suivi de (file). Dans ce contexte, dans bash, (file)n'est pas valide. (...)peut être valide en tant que jeton unique dans certains contextes tels que:
(sub shell)
func () {
...
}
var=(foo bar)
Mais pas dans
sort < (cmd)
Dans la fishcoquille, c'est différent. In fish, (...)est utilisé pour la substitution de commande (l'équivalent de $(...)in bash). Et <est destiné à la redirection d’entrée comme dans les shells Bourne-like.
Alors dans fish:
sort <(echo file)
serait la même chose que:
sort < (echo file)
C'est:
sort < file
Mais c'est quelque chose de complètement différent de bashla substitution de processus.
Dans le yashshell, un autre shell POSIX <(...)n’est pas destiné à la substitution de processus, mais à la redirection de processus.
Là dedans,
sort <(ls -l)
Court pour:
sort 0<(ls -l)
est un opérateur de redirection. C'est plus ou moins équivalent à:
ls -l | sort
Alors que dans bash, le <(ls -l)est étendu au chemin d'un tuyau, il ressemble donc beaucoup à:
ls -l | sort /dev/fd/0
Dans zsh, (...)est surchargé en tant qu'opérateur de globbing ( (*.txt|*.png)développerait les fichiers txtet les pngfichiers) et en tant que qualificateur de globes ( *(/)par exemple, les fichiers de répertoires).
Dans zsh, dans:
sort < (ls -l)
Cela (ls -l)serait traité comme un qualificatif global. Le lqualificatif glob est de faire correspondre le nombre de liens et attend un nombre après l(comme dans la ls -ld ./*(l2)liste des fichiers avec 2 liens), c'est pourquoi vous obtenez une zsh: number expectederreur.
sort < (w)aurait donné une zsh: no matches found: (w)erreur à la place car (w)correspond aux fichiers avec un nom vide qui sont en écriture.
sort < (w|cat)aurait trié le contenu des fichiers wet / ou du catrépertoire en cours ...