将Bash字符串文字与局部变量进行比较

时间:2013-06-17 21:26:53

标签: bash

#!/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"](如上所示)来比较lang"Java"的值。但是,此比较会产生以下错误:

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

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

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

3 个答案:

答案 0 :(得分:27)

您需要[]周围的空格:

    if [ "$lang" = "Java" ]

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

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

最后,执行字符串比较的运算符为=,但某些版本的test允许==作为扩展名。

答案 1 :(得分:3)

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

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

if [ "$lang" == "Java" ]; then

答案 2 :(得分:1)

首先,不要使用[] - better来使用[[。

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

if [[ $lang == Java ]]