我想测试一个条件是真还是假。下面是一个 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
-n 字符串
如果字符串长度非零,则为 True。
但我对字符串长度是否非零不感兴趣,而是对两个字符串是否彼此相等感兴趣。
答案1
[[
的行为符合设计,因为$var==bar
实际上不是比较两个字符串的条件表达式,而是单个字符串(恰好包含两个等号字符)。由于[[ ... ]]
仅包含字符串而不是条件表达式,因此它的默认设置是使用标志来-n
检查字符串是否不是零长度,从而以退出代码 进行计算0
。但这不是您想要的,所以如果您想评估 $var 是否等于 bar,请在==
运算符周围使用空格将其转换为条件表达式:
[[ $var == bar ]]
来自条件表达式手册页:
字符串1 == 字符串2
字符串1 = 字符串2
如果字符串相等则为 True。当与 [[ 命令一起使用时,将执行如上所述的模式匹配(请参阅条件构造)。
'=' 应与测试命令一起使用以确保 POSIX 一致性。