18
#!/bin/bash
function getComment(){
    local lang=$1;
    local theComment=$2;
    if [$lang == "Java"] #Surprisingly, an error occurs here: prog.sh: line 6: [Java: command not found
    then
        echo "//"$theComment; return;
    else
        echo "Language not found!"; return;
    fi
}

getComment "Java" "Whoo!";

exit $?

我正在编写一个将变量与字符串文字进行比较的 Bash 脚本,并且我正在使用[$lang == "Java"](如上所示)来比较 to 的lang"Java"。但是,此比较会产生以下错误:

stderr:
prog.sh: line 6: [Java: command not found

我也尝试过使用[$lang -eq "Java"]and ($lang -eq "Java"),但是这些语句也不起作用,并且它们产生了完全相同的错误。

为什么会发生此错误,将局部变量与字符串文字进行比较的正确方法是什么?

4

3 回答 3

29

你需要周围的空间[]

    if [ "$lang" = "Java" ]

[是一个命令(它是 的同义词test),并且与任何其他命令一样,您可以用空格分隔参数。

您还应该将变量放在双引号中,以防该值为空或包含空格或通配符。

最后,执行字符串比较的运算符是=,尽管某些版本的testallow==作为扩展。

于 2013-06-17T21:28:57.620 回答
3

首先,您必须将变量放在双引号之间,因为变量可能包含一些空格或特殊字符。

最后记住“[”它本身就是一个可执行文件(通常在 /bin 中)。

if [ "$lang" == "Java" ]; then
于 2013-06-17T21:39:19.237 回答
2

首先,不要使用 [ ] -最好使用 [[。

第二 - 你需要添加一些空格:

if [[ $lang == Java ]]
于 2013-06-17T21:30:36.293 回答