Sono scrivere uno script per leggere loutput di un comando nella variabile a e b. Questo è lo 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 ottiene lerrore di sintassi come:
line 3: syntax error near unexpected token `<" line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)" Ma quando digito lo stesso comando nella console funziona senza problemi.
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 Qualsiasi aiuto su questo è davvero apprezzato.
Commenti
Risposta
 sh (che nella maggior parte dei sistemi (derivati da Debian) è collegato a dash) non “consente la  sostituzione del processo . Prova a invocare con bash script.sh. La stessa chiamata di ./script.sh viene eseguita con sha-bang che è  /bin/bash  nel tuo script. 
Commenti
- @MichaelDurrant Ah, la tua modifica ora significa lopposto di quello che volevo dire.
-  @muru Non posso ' accettare la modifica t o bash. Intendo esattamentedash.file $(which sh)output/bin/sh: symbolic link to 'dash'
-  Costas, questo ' è quello che ho significava. Michael Durrant ha cambiato la mia modifica per sostituire dashconbash. Grazie per aver risolto il problema.
-  Intendi la sostituzione del processo (<( echo foo )), non la sostituzione del comando ($(echo foo)) (che fa parte della specifica POSIX).
- @chepner Hai ragione. Grazie per il commento. Riparato.
Risposta
Stavo cercando di richiamare lo script come sh file.sh e ho ricevuto lerrore . Ma quando ho invocato lo stesso script di ./file.sh e bash file.sh funziona e dà il risultato desiderato.
Risposta
Inoltre, puoi semplicemente aggiungere la riga sotto nella parte superiore dello script:
#!/bin/bash  Indica al tuo terminale / console di eseguire lo script come script bash, e la sostituzione del tuo processo “<( cmd )” funzionerà bene. 
Commenti
-  Nota che lo script dellOP ' aveva già quello shebang, ma lOP era in esecuzione come sh file.shanzichéfile.sho./file.sh(vedi la propria risposta )
$ ./script.shshdon ' t consentire la sostituzione del comando. Prova a richiamare conbash script.sh. La stessa chiamata di./script.shviene eseguita consha-bangche è / bin / ** bash ** nel tuo script.