【发布时间】:2015-01-03 03:27:53
【问题描述】:
设置后:
var1="a\nb"
var2="$var1"
我希望$var1 和$var2 相等;但是:
[[ $var1 == $var2 ]] && echo yes || echo no
返回no。这是为什么呢?
【问题讨论】:
标签: bash variables if-statement newline
设置后:
var1="a\nb"
var2="$var1"
我希望$var1 和$var2 相等;但是:
[[ $var1 == $var2 ]] && echo yes || echo no
返回no。这是为什么呢?
【问题讨论】:
标签: bash variables if-statement newline
你必须引用来执行字符串比较:
[[ "$var1" == "$var2" ]]
所以这行得通:
$ var1="a\nb"
$ var2="$var1"
$ [[ "$var1" == "$var2" ]] && echo yes || echo no
yes
来自 cmets,chepner indicates:
没有引号,$var2 被解释为一个模式,而不是一个字符串, 并且 \n 被视为常规 n。
【讨论】:
echo "$var1" 显示 a\nb。为什么它无法显示换行符?
bash 默认情况下不解释反斜杠转义。您需要改用echo -n "$var1"。
$var2 被解释为一个模式,而不是一个字符串,\n 被视为一个普通的n,所以[[ anb == $var2 ]] 会成功。
==的右声道:[[ $var1 == "$var2" ]]就足够了。来自手册:当使用 == 和 != 运算符时,运算符右侧的字符串被视为模式,并根据下面的模式匹配中描述的规则进行匹配。跨度>