Porque é assim que deve ser.
<(...) in bash é a sintaxe para substituição de processos. É copiado do mesmo operador em ksh .
< , ( , ) , | , & , ; são tokens especiais lexicais em bash que são usados para formar operadores especiais em diferentes combinações. < , <( , << , <& ... cada um tem seu papel. < é para redirecionamento. <file , < file redirecionaria a entrada de um arquivo. <'(file)' redirecionaria a entrada de um arquivo chamado (file) , mas <(file) é um operador diferente que não é um operador de redirecionamento.
< (file) seria < seguido por (file) . Nesse contexto, em bash , (file) não é válido. (...) pode ser válido como um único token em alguns contextos como:
(sub shell)
func () {
...
}
var=(foo bar)
Mas não em
sort < (cmd)
No shell fish , é diferente. Em fish , (...) é para substituição de comando (o equivalente a $(...) in bash ). E < é para redirecionamento de entrada, como em shells semelhantes a Bourne.
Então, em fish :
sort <(echo file)
seria o mesmo que:
sort < (echo file)
Isto é:
sort < file
Mas isso é algo completamente diferente da substituição do processo de bash .
No shell yash , outro shell POSIX, <(...) não é para substituição de processo , mas para redirecionamento de processo
Lá,
sort <(ls -l)
Abreviação de:
sort 0<(ls -l)
é um operador de redirecionamento. É mais ou menos equivalente a:
ls -l | sort
Enquanto em bash , o <(ls -l) é expandido para o caminho de um canal, então é mais parecido com:
ls -l | sort /dev/fd/0
Em zsh , (...) está sobrecarregado como um operador de globbing ( (*.txt|*.png) seria expandido para txt e png files) e como qualifier glob ( *(/) por exemplo expande para arquivos de diretório). / p>
Em zsh , em:
sort < (ls -l)
Esse (ls -l) seria tratado como um qualificador glob. O qualificador l glob deve corresponder ao número de links e esperar um número após l (como em ls -ld ./*(l2) listaria os arquivos com 2 links), por isso você obtém um erro zsh: number expected .
sort < (w) teria dado um erro zsh: no matches found: (w) , pois (w) corresponde aos arquivos com nome vazio que são graváveis.
sort < (w|cat) teria classificado o conteúdo dos arquivos w e / ou cat no diretório atual ...