【问题标题】:why is a bash variable containing \n not equal to its copy?为什么包含 \n 的 bash 变量不等于它的副本?
【发布时间】: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


    【解决方案1】:

    你必须引用来执行字符串比较:

    [[ "$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" ]]就足够了。来自手册:当使用 ==!= 运算符时,运算符右侧的字符串被视为模式,并根据下面的模式匹配中描述的规则进行匹配。跨度>
    • 啊 - 在阅读 link 之后,我认为不需要。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多