【问题标题】:Linux shell programming string compare syntaxLinux shell 编程字符串比较语法
【发布时间】:2011-04-21 14:13:37
【问题描述】:

===在Linux shell编程中比较字符串有什么区别?

也许下面的代码可以工作:

if [ "$NAME" = "user" ]
then
    echo "your name is user"
fi

但我认为这不是正确的语法。它将用于通过== 语句比较字符串。

什么是正确的?

【问题讨论】:

    标签: linux string shell compare


    【解决方案1】:

    单等号是正确的

    字符串 1 == 字符串 2

    字符串 1 = 字符串 2

    如果字符串相等则为真。 '=' 应该与测试命令一起使用以确保 POSIX 一致性

    NAME="rafael"
    USER="rafael"
    if [ "$NAME" = "$USER" ]; then
        echo "Hello"
    fi
    
    【解决方案2】:

    通常,在比较字符串时,= 运算符的作用与 == 相同。

    注意: == 比较运算符在双括号测试中的行为与在单括号中的行为不同。

    [[ $a == z* ]]   # True if $a starts with an "z" (pattern matching).
    [[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
    
    [ $a == z* ]     # File globbing and word splitting take place.
    [ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
    

    来源:http://tldp.org/LDP/abs/html/comparison-ops.html

    【讨论】:

    • 谢谢!我一直在努力解决我使用单方括号而不是双方括号的问题。
    【解决方案3】:

    这些页面解释了 bash 中的各种比较运算符:

    在第二个链接页面上,您会发现:

    ==
    
        is equal to
    
        if [ "$a" == "$b" ]
    
        This is a synonym for =.
    

    【讨论】:

    • This has come up before 此评论是在您对答案进行多次修改之前提出的
    • @Diarmaid 我知道这会发生:)。我的回答很粗鲁吗?也许,当然,我只是浪费时间阅读一个需要 10 秒谷歌搜索才能找到答案的问题。无论如何,我也花时间实际输入了一个正确的答案。所以现在 OP 都得到了他的答案和一个温和的提醒,请先搜索。
    • SO 的想法是提供比“10 秒谷歌搜索答案”更好的东西吗?
    • 这个答案本身现在是 Google 上的第一个热门。这就是为什么只回答“Google it”的原因。并不总是一个好政策。如果您没有注意到,StackOverflow 的页面排名非常高。
    • 值得注意的是,如果它是 #!/bin/sh 程序,而不是 #!/bin/bash 程序,我不能在我的 16.10 ubuntu 服务器上使用双等号。我想这就是 John Giotta 在下面的回答中关于 POSIX 一致性的评论所暗示的。
    【解决方案4】:

    您可以查看herehere。就个人而言,为了比较字符串,我使用case

    case "$string1" in
      "$string2" ) echo "matched";;
      *) echo "not matched";;
    esac
    

    我不必知道应该使用哪个运算符

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2012-06-06
      • 1970-01-01
      • 2022-09-27
      • 2020-03-13
      • 2013-10-21
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多