我尝试了以下脚本:
#!/bin/bash
var1="Test 1"
var2="Test 2"
if [ "$var1"="$var2" ]
then
echo "Equal"
else
echo "Not equal"
fi
它给了我Equal
。虽然应该已经打印出来了Not equal
仅当我在周围插入空格时=
它按预期工作:
if [ "$var1" = "$var2" ]
并打印Not equal
为什么会这样呢?为什么是"$var1"="$var2"
不一样"$var1" = "$var2"
?
此外,当我写if [ "$var1"= "$var2" ]
,它给了
line 4: [: Test 1=: unary operator expected
这是什么意思?为什么它需要一元运算符?
test
(or [ expr ]
) 是一个内置函数。与 bash 中的所有函数一样,您可以将其参数作为空格分隔的单词传递。
正如 bash 内置函数的手册页所述:“每个运算符和操作数必须是一个单独的参数。”
这就是 bash 和大多数其他 Unix shell 的工作方式。
变量赋值不同。
在 bash 中变量赋值的语法如下:name=[value]
。您不能在周围放置未加引号的空格=
因为 bash 不会将其解释为您想要的作业。 bash 将大多数单词列表视为带参数的命令。
E.g.
# call the command or function 'abc' with '=def' as argument
abc =def
# call 'def' with the variable 'abc' set to the empty string
abc= def
# call 'ghi' with 'abc' set to 'def'
abc=def ghi
# set 'abc' to 'def ghi'
abc="def ghi"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)