我有两个变量
var=""
var1=abcd
这是我的shell脚本代码
if [ $var == $var1 ]; then
do something
else
do something
fi
如果我运行此代码,则会提示警告
[: ==: unary operator expected
我该如何解决这个问题?
答案 0 :(得分:81)
由于$var
的值是空字符串,因此:
if [ $var == $var1 ]; then
扩展到:
if [ == abcd ]; then
这是语法错误。
您需要引用参数:
if [ "$var" == "$var1" ]; then
您也可以使用=
而不是==
;这是原始语法,而且更便于携带。
如果您使用的是bash,则可以使用[[
语法,该语法不需要引号:
if [[ $var = $var1 ]]; then
即使这样,引用变量引用并添加引号也不会有害:
if [[ "$var" = "$var1" ]]; then
可能会为将来的读者节省一些时间,以便记住[[
... ]]
是否需要它们。
答案 1 :(得分:0)
为什么所有人都想使用' =='而不是简单的' =' ?这是坏习惯!它仅用于[[]]表达式。而在(())也是如此。但你也可以使用=!无论如何它都运作良好。如果你使用数字,不是字符串使用不是parcing到字符串然后比较相似的字符串,但比较数字。像那样
let -i i=5 # garantee that i is nubmber
test $i -eq 5 && echo "$i is equal 5" || echo "$i not equal 5"
它的匹配更好,更快。我是C / C ++,Java,JavaScript方面的专家。但如果我使用bash,我永远不会使用' =='相反' ='。你为什么这样做?