Bash语法错误:“[[:not found”

时间:2010-08-03 22:15:16

标签: bash

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

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

以下是我收到的消息

  

getconfig.sh:89:[[:not found
  getconfig.sh:89:[[:未找到
  getconfig.sh:94:[[:not found

  每次运行时我都会收到这三个错误;但是,脚本完成并运行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“

感谢您的回答。

3 个答案:

答案 0 :(得分:29)

如果您的脚本是可执行的并且您正在执行它./getconfig.sh,则脚本的第一行必须是:

#!/bin/bash

如果没有该shebang行,您的脚本将被sh解释,该[[无法理解if语句中的bash getconfig.sh

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

答案 1 :(得分:0)

如果你要检查是否相等,那不应该是吗?

if [[ "${debugMode}" = "true" ]]; then .... fi

答案 2 :(得分:0)

使用:

bash scriptname.sh

代替:

sh scriptname.sh