语法错误:“(”意外(需要单词)---在我的 bash 脚本中

语法错误:“(”意外(需要单词)---在我的 bash 脚本中

我有一个 bash 脚本:

#!/bin/bash

VAR1="var1"
VAR2="var2"
VAR3="var3"

cat ${VAR1} \
    <(echo -e '<something>') \                       # <--------- here's the error
    ${VAR2}/file123.txt \
    <(echo -e '</something>\n<something2>') \
    ${VAR3}/file456.txt \
    <(echo -e '</something2>')

当我运行它时:sh my_script.sh,我收到错误:

 my_script.sh: 9: Syntax error: "(" unexpected (expecting word)

更新:

bash未找到,“/bin/bash”不存在。也bash没有。

答案1

尝试 :

chmod 755 "my_script.sh"

然后像这样简单地运行它

my_script.sh

开头的行#!/bin/bash用于告诉您的系统应该使用哪个 shell 来运行脚本。我认为你通过使用 执行它来超越这一点sh my_script.sh。您也可以明确地编写/bin/bash my_script.sh.另外,如果您的脚本中有一些 bash 特定的语法,您应该考虑将扩展名更改为.bash更明确。


编辑

您的 FreeBSD 发行版上似乎没有bash(FreeBSD 上的默认 shell 似乎是tcsh)。你可以找到这里bash在 FreeBSD 上安装的教程。我提供的解决方案应该可以正常工作。祝你好运。

答案2

显然,从 she-bang 来看,该脚本旨在由bashnot运行sh(尽管zsh由于未加引号的变量,语法看起来更像语法)。

您需要使用bash或 来运行它zsh。如果这些 shell 不可用,您可以安装它们,或者将该脚本转换为sh此处应该简单的语法。

sh语言(Bourne 或 POSIX)没有<(...)运算符。它来自于并且ksh受到支持。是非标准的,甚至只能在某些环境中使用。bashzshecho -ebashksh

标准sh等效项是:

var1="var1"
var2="var2"
var3="var3"

cat < "$var1" || exit
printf '<something>\n' || exit
cat < "$var2/file123.txt" || exit
printf '</something>\n<something2>\n' || exit
cat < "$var3//file456.txt" || exit
print '</something2>\n'

相关内容