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

Kat*_*a L 1 linux bash shell process-substitution

我想运行这个脚本:

#!/bin/bash
echo <(true)
Run Code Online (Sandbox Code Playgroud)

我把它当作:

sh file.sh
Run Code Online (Sandbox Code Playgroud)

我得到了" Syntax error: "(" unexpected".我发现了一些类似的情况,但仍然无法解决这个问题.我是shell脚本的初学者,但据我了解:

  1. 我使用的shebang是正确的并选择了bash shell,因此进程替换语法应该有效
  2. 我从命令行尝试相同,它的工作原理.我查了echo $0一下它给了我" bash",那么在命令行和调用同一个shell的脚本中运行命令有什么不同?

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

And*_*eak 5

你应该运行你的脚本bash,即将其设置为可执行文件后bash ./script.sh使用或使用shebang ./script.sh.只有运行它sh ./script.sh才能得到你的错误,正如Cyrus评论的那样.

另见:shebang在unix.SE中的角色

  • @KatrinnaL`./ file.sh`是首选; 文件的shebang行应该"知道"使用哪个shell,你可能不会.唯一的真正原因使用`bash的file.sh`是,如果家当是错误的(或失踪)或文件不可执行 - 但在这种情况下,这是更好地解决这个问题,然后使用`./file. sh`. (2认同)