Eu sou escrever um script para ler a saída de um comando para as variáveis a e b. Este é o script
#!/bin/bash read a b < <(awk "/Application Server/ && !seen[$7]++{printf "%s ", $7}" /tmp/ServerState) echo "The value of a is $a" echo "The value of b is $b" e obtendo o erro de sintaxe como:
line 3: syntax error near unexpected token `<" line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)" Mas quando estou digitando o mesmo comando no console, ele está funcionando para mim sem nenhum problema.
app@user:/tmp> read a b < <(awk "/Application Server/ && !seen[$7]++{printf "%s ", $7}" /tmp/ServerState) app@user:/tmp> echo $a FAILED app@user:/tmp> echo $b STARTED Qualquer ajuda sobre isso é muito apreciada.
Comentários
Resposta
 sh (que na maioria dos sistemas (derivados do Debian) está vinculado a dash) não permite  substituição de processos . Tente invocar por bash script.sh. A mesma chamada por ./script.sh é executada com sha-bang que é  /bin/bash  em seu script. 
Comentários
- @MichaelDurrant Ah, sua modificação agora significa o oposto do que eu quis dizer.
-  @muru eu não posso ' não aceitar a modificação t o bash. Quero dizerdashexatamente.file $(which sh)output/bin/sh: symbolic link to 'dash'
-  Costas, que ' é o que eu significou. Michael Durrant mudou minha edição para substituir dashporbash. Obrigado por corrigir isso.
-  Você quer dizer substituição de processo (<( echo foo )), não substituição de comando ($(echo foo)) (que faz parte da especificação POSIX).
- @chepner Você está certo. Obrigado por comentar. Reparado.
Resposta
Eu estava tentando invocar o script como sh file.sh e estava obtendo o erro . Mas quando invoquei o mesmo script que ./file.sh e bash file.sh, ele está funcionando e dando o resultado desejado.
Resposta
Além disso, você pode simplesmente adicionar a linha abaixo no topo do seu script:
#!/bin/bash  Diz ao seu terminal / console para executar o script como script bash, e então a substituição do seu processo “<( cmd )” funcionará bem. 
Comentários
-  Observe que o script do OP ' s já tinha esse shebang, mas o OP estava em execução como sh file.shem vez defile.shou./file.sh(consulte suas próprias respostas )
$ ./script.shshnão ' não permite a substituição de comandos. Tente invocar porbash script.sh. A mesma chamada por./script.shé executada comsha-bangque é / bin / ** bash ** em seu script.