将Bash字符串文字与局部变量进行比较
我正在编写一个Bash脚本,将变量与字符串文本进行比较,并使用将Bash字符串文字与局部变量进行比较,bash,Bash,我正在编写一个Bash脚本,将变量与字符串文本进行比较,并使用[$lang==“Java”](如上所示)将lang的值与的“Java”进行比较。但是,此比较会产生以下错误: #!/bin/bash function getComment(){ local lang=$1; local theComment=$2; if [$lang == "Java"] #Surprisingly, an error occurs here: prog.sh: line 6: [Java
[$lang==“Java”]
(如上所示)将lang
的值与的“Java”
进行比较。但是,此比较会产生以下错误:
#!/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 $?
我也尝试过使用[$lang-eq“Java”]
和($lang-eq“Java”)
,但这些语句也不起作用,它们产生了完全相同的错误
为什么会发生此错误?将局部变量与字符串文字进行比较的正确方法是什么?您需要在
[
和]
周围使用空格:
stderr:
prog.sh: line 6: [Java: command not found
[
是一个命令(它是test
的同义词),与任何其他命令一样,您可以用空格分隔参数
如果值为空或包含空格或通配符,还应将变量置于双引号中
最后,执行字符串比较的操作符是
=
,尽管一些版本的测试允许=
作为扩展。第一件事是,不要使用[]-而是使用[]
第二,您需要添加一些空格:
if [ "$lang" = "Java" ]
首先,必须将变量括在双引号之间,因为变量可能有一些空格或特殊字符
最后记住“[”本身就是一个可执行文件(通常在/bin中)
==比较运算符在双括号测试中的行为与在单括号测试中的行为不同。这与您的问题无关,但您不需要在shell中的行末尾使用分号。只有在单行上放置多个命令时才需要分号。可能的重复不是最佳的重复,但有许多问题在堆栈溢出时使用相同的答案:在test
命令的[
和]
周围放置空格。
if [[ $lang == Java ]]
if [ "$lang" == "Java" ]; then