Bash脚本进程替换语法错误:意外的"("

4
我想运行这个脚本:
#!/bin/bash
echo <(true)

我以以下方式运行它:

sh file.sh

我遇到了"Syntax error: "(" unexpected"的错误。我找到了一些类似的情况,但仍然无法解决。
作为一个初学者,我理解:
  1. 我使用的shebang是正确的,并选择了bash shell,因此进程替换语法应该可以工作。
  2. 我尝试在命令行上执行相同的命令,它可以正常工作。 我用echo $0检查了一下,它会返回"bash",那么在命令行和从调用相同shell的脚本运行命令有什么区别?
也许这是一些简单的问题,但我找不到解释或解决方法。

你怎么运行这个脚本?我可以用sh ./script.sh来重现它。 - Cyrus
@Cyrus和我无法使用./file.sh :) 也就是说,它对我来说按照预期工作。 - Andras Deak -- Слава Україні
1
如果尚未解决,则返回已翻译文本。 - jerik
3个回答

7
你应该使用bash来运行你的脚本,即bash ./script.sh或者在将其设置为可执行文件后使用shebang./script.sh。只有当使用sh ./script.sh时,我才会得到你的错误,正如Cyrus所评论的那样。
另请参阅:shebang在unix.SE中的作用

我使用了 sh file.sh... 我假设它总是查看 shebang 声明。感谢提供的链接,它对我帮助很大 - 当我在命令行指定解释器时,shebang 就会被忽略。因此,我应该使用 "bash file.sh - 从命令行确定解释器或 ./file.sh - 从 shebang 声明中确定"。 - Natasha
2
@KatrinnaL 首选使用 ./file.sh;文件的 shebang 行应该“知道”要使用哪个 shell,而您可能不知道。唯一真正需要使用 bash file.sh 的原因是 shebang 错误(或缺失)或文件不可执行 - 但在这些情况下,最好解决问题,然后使用 ./file.sh - Gordon Davisson

0

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

问题在于进程替换是一个额外的bash功能,不属于posix标准的一部分。


-1

sh file.sh

错误提示:errorsh: 3: Syntax error: "(" unexpected

解决方法:

bash file.sh


1
这与这个答案中的解决方案相同。 - Eric Aya
这并没有回答问题。一旦您拥有足够的声望,您就可以在任何帖子上发表评论;相反,提供不需要询问者澄清的答案. - 来自审核 - Juan Fontes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接