我想测试一个条件是真还是假。这是一个示例 bash 脚本:
#!/bin/bash
set -x
var=foo
if [[ $var==bar ]]
then
echo $var is bar
else
echo $var is not bar
fi
set +x
我希望输出为foo is not bar
,但我得到以下输出:
foo is bar
在查看调试输出时,我注意到正在评估条件-n
:
+ var=foo
+ [[ -n foo==bar ]]
+ echo foo is bar
foo is bar
+ set +x
在Bash Conditional Expressions 手册页上它说
-n 字符串
如果字符串的长度不为零,则为真。
但是我对字符串长度是否非零不感兴趣,而是两个字符串是否彼此相等。
[[
行为符合设计,因为$var==bar
实际上不是比较两个字符串的条件表达式,而是一个字符串(恰好包含两个等号字符)。由于[[ ... ]]
只包含一个字符串而不是一个条件表达式,它的默认值是使用-n
标志来检查字符串是否不是零长度,因此使用退出代码进行评估0
。但是,这不是您想要的,因此如果您想评估 $var 是否等于 bar,请在==
运算符周围使用空格将其转换为条件表达式:从条件表达式手册页: