Porque é assim que deve ser.
<(...)in bashé a sintaxe da substituição do processo. É copiado do mesmo operador em ksh.
<, (, ), |, &, ;São símbolos lexicais especiais em bashque são usados para formar os operadores especiais em diferentes combinações. <, <(, <<, <&... cada um tem o seu papel. <é para redirecionamento. <file, < fileredirecionaria 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 fishshell, é diferente. In fish, (...)é para substituição de comando (o equivalente a $(...)in bash). E <é para redirecionamento de entrada como em shells tipo Bourne.
Então em fish:
sort <(echo file)
seria o mesmo que:
sort < (echo file)
Isso é:
sort < file
Mas isso é algo completamente diferente da bashsubstituição de processos.
No yashshell, outro shell POSIX, <(...)não é para substituição de processo, mas para redirecionamento de processo
Lá,
sort <(ls -l)
Abreviatura de:
sort 0<(ls -l)
é um operador de redirecionamento. É mais ou menos equivalente a:
ls -l | sort
Enquanto estiver no bash, o <(ls -l)é expandido para o caminho de um tubo, por isso é mais como:
ls -l | sort /dev/fd/0
In zsh, (...)é sobrecarregado como um operador globbing ( (*.txt|*.png)seria expandido para txte pngarquivos) e como qualificador global ( *(/)por exemplo, se expande para arquivos de diretório).
Em zsh, em:
sort < (ls -l)
Isso (ls -l)seria tratado como um qualificador global. O lqualificador glob deve corresponder ao número de links e espera um número depois l(como em ls -ld ./*(l2)listaria os arquivos com 2 links), é por isso que você recebe um zsh: number expectederro lá.
sort < (w)em zsh: no matches found: (w)vez disso , teria dado um erro, pois (w)corresponde aos arquivos com um nome vazio que pode ser gravado.
sort < (w|cat)teria classificado o conteúdo dos arquivos we / ou catno diretório atual ...