Substituição processo não é especificado por POSIX, por isso nem todos POSIX shell apoiá-lo, apenas alguns escudos como bash, zsh, ksh88, ksh93apoio.
No Centossistema, /bin/shé um link simbólico para /bin/bash. Quando bashé chamado com o nome sh, bashentra no modo posix ( arquivos de inicialização do Bash - chamado com o nome sh ). No modo posix, process substitutionnão é suportado, causa erro de sintaxe.
Script deve funcionar, se você ligar bashdiretamente bash test.sh. Caso contrário, talvez bashtenha entrado no modo posix. Isso pode ocorrer se você começar bashcom --posixargumento ou variável POSIXLY_CORRECTestiver definida quando bashiniciar:
$ bash --posix test.sh
test.sh: line 54: syntax error near unexpected token `('
test.sh: line 54: `paste <(printf "%s\n" "TOP")'
$ POSIXLY_CORRECT=1 bash test.sh
test.sh: line 54: syntax error near unexpected token `('
test.sh: line 54: `paste <(printf "%s\n" "TOP")
Ou bashé construído com --enable-strict-posix-defaultopção.
Aqui, você não precisa de substituição de processo, pode usar tubos de shell padrão:
printf "%s\n" "TOP" | paste -
-é a maneira padrão de dizer pastepara ler os dados do stdin. Em algumas pasteimplementações, você pode omitir, embora isso não seja padrão.
Onde seria útil ao colar a saída de mais de um comando, como em:
paste <(cmd1) <(cmd2)
Em sistemas compatíveis /dev/fd/n, isso pode ser feito shcom:
{ cmd1 4<&- | { cmd2 3<&- | paste /dev/fd/3 -; } 3<&0 <&4 4<&-; } 4<&0
(é o que <(...)faz internamente).
dashvez debash).