Jsem psaní skriptu pro čtení výstupu příkazu do proměnné aab. Toto je skript
#!/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" a chyba syntaxe se zobrazuje takto:
line 3: syntax error near unexpected token `<" line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)" Ale když píšu stejný příkaz do konzoly, pracuje to pro mě bez problémů.
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 Jakákoli pomoc s tímto je opravdu oceněna.
Komentáře
odpověď
 sh (který je ve většině systémů (odvozených z Debianu) propojen s dash) neumožňuje  substituci procesu . Zkuste vyvolat bash script.sh. Stejné volání od ./script.sh se spustí s sha-bang, což je  /bin/bash  ve vašem skriptu. 
Komentáře
- @MichaelDurrant Ah, vaše změna nyní znamená opak toho, co jsem chtěl říct.
-  @muru Nemohu ' změnu přijmout t o bash. Myslím přesnědash.file $(which sh)výstup/bin/sh: symbolic link to 'dash'
-  Costas, to je ' míněno. Michael Durrant změnil moji úpravu, aby nahradil dashbash. Děkujeme, že jste to napravili.
-  Máte na mysli substituci procesu (<( echo foo )), nikoli substituci příkazu ($(echo foo)) (což je součástí specifikace POSIX).
- @chepner Máte pravdu. Děkuji za komentář. Opraveno.
Odpověď
Pokoušel jsem se vyvolat skript jako sh file.sh a zobrazovala se chyba . Ale když jsem vyvolal stejný skript jako ./file.sh a bash file.sh, funguje to a dává požadovaný výsledek.
Odpověď
Dále můžete jednoduše přidat řádek níže v horní části skriptu:
#!/bin/bash  Říká vašemu terminálu / konzole, aby spustil váš skript jako bash skript, a poté bude vaše substituce procesu „<( cmd )“ fungovat dobře. 
Komentáře
-  Všimněte si, že skript OP ' již tento shebang měl, ale OP běžel jako sh file.shmístofile.shnebo./file.sh(viz vlastní odpověď )
$ ./script.shshnepovolujte substituci příkazu '. Zkuste vyvolatbash script.sh. Stejné volání./script.shse spustí ssha-bang, což je ve vašem skriptu / bin / ** bash **.