我有两个变量
var=""
var1=abcd
这是我的shell脚本代码
if [ $var == $var1 ]; then
do something
else
do something
fi
如果我运行此代码,它将提示警告
[: ==: unary operator expected
我该如何解决这个问题?
我有两个变量
var=""
var1=abcd
这是我的shell脚本代码
if [ $var == $var1 ]; then
do something
else
do something
fi
如果我运行此代码,它将提示警告
[: ==: unary operator expected
我该如何解决这个问题?
由于 的值为$var
空字符串,因此:
if [ $var == $var1 ]; then
扩展为:
if [ == abcd ]; then
这是一个语法错误。
您需要引用参数:
if [ "$var" == "$var1" ]; then
您也可以使用=
而不是==
; 那是原始语法,而且更便携。
如果您使用的是 bash,则可以使用[[
不需要引号的语法:
if [[ $var = $var1 ]]; then
即使这样,引用变量引用并添加引号也没有什么坏处:
if [[ "$var" = "$var1" ]]; then
可能会为未来的读者节省一点时间来记住是否[[
……]]
需要它们。
为什么所有人都想使用 '==' 而不是简单的 '=' ?这是坏习惯!它仅用于 [[ ]] 表达式。在 (( )) 中也是如此。但是你也可以使用=!它在任何情况下都能很好地工作。如果您使用数字,则不是字符串使用 not 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,我从不使用 '==' 而不是 '='。你为什么这样做?