Bash script process substitution Syntax error: "(" unexpected

Bash script process substitution Syntax error: "(" unexpected

我想要运行这个脚本:

#!/bin/bash
echo <(true)

我运行它是:

sh file.sh

然后我得到“Syntax error: "(" unexpected”。我发现了一些类似的情况,但仍然无法解决。 我是 shell 脚本的初学者,但据我了解:

  1. 我使用的 shebang 是正确的并选择了 bash shell ,所以进程替换语法应该有效
  2. 我从命令行尝试了同样的方法,它起作用了。我检查了 echo [=13=] ,它给了我 "bash" ,那么在命令行中使用 运行 命令和调用相同 shell 的脚本有什么区别?

也许这很简单,但我找不到解释或解决方案。

您应该 运行 您的脚本 bash,即 bash ./script.sh 或在将其设置为可执行文件后使用 ./script.sh 的 shebang。正如赛勒斯评论的那样,只有 运行 将其与 sh ./script.sh 结合使用才能得到您的错误。

另请参阅:role of shebang at unix.SE

从您的 ~/.bashrc~/.profile(等)文件中删除 export POSIXLY_CORRECT=1

问题在于流程替换是一项添加的 bash 功能,不属于 posix 标准。

sh file.sh

errorsh:3:语法错误:“(”意外

解决方案:

bash file.sh