Bash语法错误:"[[:not found"

Jus*_*tin 5 bash

我正在使用当前正在服务器上运行的bash脚本(RHEL4).我正在使用Ubuntu 10.04在我的笔记本电脑上进行开发,但我不认为该平台会导致问题.

这是正在发生的事情:我有一个骨架脚本,调用另一个执行大部分工作的脚本.但是,它会调用getConfig.sh.getConfig.sh基本上只是解析一些命令行参数(使用getopts)并调用Java程序来解析一些XML文件.无论如何,getConfig.sh会抛出很多错误(但似乎仍然有效).

这是我得到的信息

getconfig.sh:89:[[:找不到
getconfig.sh:89:[[:找不到
getconfig.sh:94:[[:未找到]

每次运行时我都会收到这三个错误; 但是,脚本完成并运行Java代码.

这是相关代码部分

parseOptions $*

if [[ "${debugMode}" == "true" ]] ; then
    DEBUG="-DDEBUG=true"
    echo "${JAVA_HOME}/bin/java ${DEBUG} -Djava.endorsed.dirs=${JAXP_HOME} -jar $(dirname $0)/GetXPath.jar ${XML_File} ${XPath_Query}"
fi

第89行是"parseOptions $*而第94行是"fi"

谢谢你的回答.

Pau*_*ce. 29

如果您的脚本是可执行的并且您正在执行它./getconfig.sh,那么脚本的第一行需要是:

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

如果没有那个shebang行,你的脚本将被解释为在语句sh中不理解.[[if

否则,您应该运行您的脚本bash getconfig.sh,而不是 sh getconfig.sh.即使您的默认shell是bash,运行的脚本sh也会使用一组简化的bash功能,以便更符合POSIX标准.[[是禁用的功能之一.

  • 我想出了这个问题.如果从另一个脚本调用脚本,请确保使用`bash nameofscript.sh`而不是`sh nameofscript.sh`. (8认同)
  • 我看到了同样的问题,但我的脚本顶部有 `#!/bin/bash`。 (3认同)
  • 谢谢丹尼斯。最初编写此代码的 dufus 在所有脚本上都使用了 #!/bin/sh。我错过了改变这个。 (2认同)
  • 呃..感谢您指出显而易见的事情。我的说#!/bin/sh。那是怎么到那里的? (2认同)
  • @AntonioMoreno:这可能会导致问题,并且可能会在系统更新期间恢复。最好不要删除该文件,并将符号链接放在“/usr/local/bin”中,并将该目录放在“PATH”中比“/bin”更早的目录中。 (2认同)

Dan*_*mak 11

用:

bash scriptname.sh

代替:

sh scriptname.sh