`

Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)

阅读更多

Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)

In Java

String.equals & String.equalsIgnoreCase

boolean     equals(Object anObject)
          比较此字符串与指定的对象。

 

boolean     equalsIgnoreCase(String anotherString)
          将此 String 与另一个 String 进行比较,不考虑大小写。

 

 

if (s1.equals(s2)) {

}

注意:一定要保证s1 != null,否则会抛出异常。

 

StringUtils.equals & StringUtils.equalsIgnoreCase

在Apache Commons Lang中的StringUtils类提供了equals和equalsIgnoreCase静态方法,它的好处是两个字符串都可以是null。

org.apache.commons.lang.StringUtils equals方法 写道
public static boolean equals(String str1, String str2)

Compares two Strings, returning true if they are equal.

nulls are handled without exceptions. Two null references are considered to be equal. The comparison is case sensitive.

StringUtils.equals(null, null) = true
StringUtils.equals(null, "abc") = false
StringUtils.equals("abc", null) = false
StringUtils.equals("abc", "abc") = true
StringUtils.equals("abc", "ABC") = false

Parameters:
str1 - the first String, may be null
str2 - the second String, may be null
Returns:
true if the Strings are equal, case sensitive, or both null
 
org.apache.commons.lang.StringUtils equalsIgnoreCase方法 写道
public static boolean equalsIgnoreCase(String str1, String str2)

Compares two Strings, returning true if they are equal ignoring the case.

nulls are handled without exceptions. Two null references are considered equal. Comparison is case insensitive.

StringUtils.equalsIgnoreCase(null, null) = true
StringUtils.equalsIgnoreCase(null, "abc") = false
StringUtils.equalsIgnoreCase("abc", null) = false
StringUtils.equalsIgnoreCase("abc", "abc") = true
StringUtils.equalsIgnoreCase("abc", "ABC") = true


Parameters:
str1 - the first String, may be null
str2 - the second String, may be null
Returns:
true if the Strings are equal, case insensitive, or both null
 

In Bash

判断字符串相等

格式1:test "$S1" = "$S2"

格式2:[ "$S1" = "$S2" ]

格式3:test "$S1" == "$S2"

格式4:[ "$S1" == "$S2" ]

格式5:[[ $S1 = $S2 ]]

格式6:[[ $S1 == $S2 ]]

 

在Bash中关于=和==的说法

man bash 写道
string1 == string2
True if the strings are equal. = may be used in place of == for strict POSIX compliance.

 

[root@web ~]# S1=Hello
[root@web ~]# S2=Hello
[root@web ~]# test "$S1" = "$S2"  && echo "equals"
equals
[root@web ~]# [ "$S1" = "$S2" ]  && echo "equals"   
equals
[root@web ~]# test "$S1" == "$S2"  && echo "equals"
equals
[root@web ~]# [ "$S1" == "$S2" ]  && echo "equals" 
equals
[root@web ~]# [[ "$S1" = "$S2" ]]  && echo "equals"
equals
[root@web ~]# [[ "$S1" == "$S2" ]]  && echo "equals"
equals
[root@web ~]#

[root@web ~]# S1=Hello
[root@web ~]# S2=hello
[root@web ~]# test "$S1" = "$S2"  && echo "equals"
[root@web ~]# [ "$S1" = "$S2" ]  && echo "equals"   
[root@web ~]# test "$S1" == "$S2"  && echo "equals"
[root@web ~]# [ "$S1" == "$S2" ]  && echo "equals" 
[root@web ~]# [[ "$S1" = "$S2" ]]  && echo "equals"
[root@web ~]# [[ "$S1" == "$S2" ]]  && echo "equals"
[root@web ~]#

 

 

判断字符串不相等

格式1:test "$S1" != "$S2"

格式2:[ "$S1" != "$S2" ]

格式3:[[ $S1 != $S2 ]]

注意在[[ ]]中,变量的引用可以不加双引号,这是与[ ]的不同之处。

也可以在判断字符串相等的基础上加上逻辑非(!)可以得到更多方法,比如:[ ! "$S1" == "$S2" ]

 

 

[root@web ~]# S1=Hello
[root@web ~]# S2=Hello
[root@web ~]# test "$S1" != "$S2" && echo "not equals"
[root@web ~]# [ "$S1" != "$S2" ] && echo "not equals"     
[root@web ~]# [[ $S1 != $S2 ]] && echo "not equals"   
[root@web ~]# S1=Hello
[root@web ~]# S2=hello
[root@web ~]# test "$S1" != "$S2" && echo "not equals"
not equals
[root@web ~]# [ "$S1" != "$S2" ] && echo "not equals"
not equals
[root@web ~]# [[ $S1 != $S2 ]] && echo "not equals"
not equals
[root@web ~]#

 

比较字符串是否相等,不区分大小写

采用shopt命令启用不区分大小写匹配模式,只在case语句和[[ ]]中有效。

man bash: shopt 写道
shopt
    Toggle the values of variables controlling optional shell behavior.

-s Enable (set) each optname.
-u Disable (unset) each optname.

nocasematch
    If set, bash matches patterns in a case-insensitive fashion when performing matching while exe-
cuting case or [[ conditional commands.
 

[root@web ~]# shopt -s nocasematch
[root@web ~]# [ "$S1" = "$S2" ] && echo "equals ignore case"
[root@web ~]# [[ "$S1" = "$S2" ]] && echo "equals ignore case"
equals ignore case
[root@web ~]# case "$S1" in "$S2") echo "equals ignore case"; esac
equals ignore case
[root@web ~]# shopt -u nocasematch
[root@web ~]# [[ "$S1" = "$S2" ]] && echo "equals ignore case"   
[root@web ~]# case "$S1" in "$S2") echo "equals ignore case"; esac
[root@web ~]#

 

包装成一个函数

equals_ignore_case(){
    shopt -s nocasematch
    [[ $1 == $2 ]]
    local rc=$?
    shopt -u nocasematch
    return $rc
}
 

[root@web ~]# equals_ignore_case "Hello" "hello" && echo "equals ignore case"
equals ignore case
[root@web ~]# equals_ignore_case "Hello" "Qello" && echo "equals ignore case"
[root@web ~]# equals_ignore_case "Hello" "hello" && echo "equals ignore case"
equals ignore case
[root@web ~]# equals_ignore_case "Hello" "helLo" && echo "equals ignore case"  
equals ignore case
[root@web ~]#

 

如果其中一个字符串是常量,可以采用 [[ ]] 中 == 的模式匹配来进行。(不用shopt开启不区分大小写)

比如:[[ $S1 == [Hh][Ee][Ll][Ll][Oo] ]]

麻烦的地方就是后面那个匹配模式要每个字符提供大小写的形式。

 

[root@web ~]# S1=Hello
[root@web ~]# [[ $S1 == [Hh][Ee][Ll][Ll][Oo] ]] && echo "equals ignore case"    
equals ignore case
[root@web ~]# S1=HeLlo
[root@web ~]# [[ $S1 == [Hh][Ee][Ll][Ll][Oo] ]] && echo "equals ignore case"
equals ignore case
[root@web ~]#

 

还可以采用case语法结构。

比如:case "$S1" in [Hh][Ee][Ll][Ll][Oo]) echo "equals ignore case";; esac

 

[root@web ~]# S1=hEllo
[root@web ~]# case "$S1" in [Hh][Ee][Ll][Ll][Oo]) echo "equals ignore case";; esac
equals ignore case
[root@web ~]# S1=hellO
[root@web ~]# case "$S1" in [Hh][Ee][Ll][Ll][Oo]) echo "equals ignore case";; esac
equals ignore case
[root@web ~]#

 

如果比较的双方都是变量,上面的技巧就无法做到了。

下面的方法是将两个字符串都变成大写的形式(使用tr命令),然后进行判断。

[ "$(echo "$S1" | tr [a-z] [A-Z])" == "$(echo "$S2" | tr [a-z] [A-Z])" ]

 

[root@web ~]# S1=Hello
[root@web ~]# S2=helLo
[root@web ~]# [ "$(echo "$S1" | tr [a-z] [A-Z])" == "$(echo "$S2" | tr [a-z] [A-Z])" ] && echo "equals ignore case"
equals ignore case
[root@web ~]#

 

 

 

本文链接:http://codingstandards.iteye.com/blog/1175608   (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录) 

上节内容:Bash字符串处理(与Java对照) - 9.获取字符串指定位置的字符、遍历字符串中的字符

下节内容:Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)

 

 

4
4
分享到:
评论

相关推荐

    BASH 中的字符串处理

    - `[[ $str1 == $str2 ]]`:检查两个字符串是否相等。 - `[[ $str1 != $str2 ]]`:检查两个字符串是否不等。 - `[[ -z $str ]]`:检查字符串是否为空。 - `[[ -n $str ]]`:检查字符串是否非空。 五、字符串查找 `...

    shell字符串比较判断是否为数字

    ### Shell字符串比较与数字判断详解 #### 一、概述 在Shell脚本编程中,进行字符串和数字的比较是一项常见的任务。本文将详细介绍如何在Shell脚本中进行字符串和数字的比较,包括基本的比较操作符及其使用场景,并...

    Python库 | py_semver-0.0.3-py3-none-any.whl

    2. **版本比较**:库提供了比较版本的方法,如`VersionInfo.compare()`,可以比较两个版本的大小,返回值可用来确定哪个版本更新或者是否相等。 3. **版本操作**:用户可以方便地创建新的版本,增加主版本、次版本...

    比较两个字符串是否相等的shell代码

    echo "两个字符串相等" else echo "两个字符串不相等" fi ``` 这里的重点在于: 1. 使用单个等号`=`进行比较。 2. 等号两侧都需要添加空格,这是Unix Shell语法的规定。 3. 添加额外的字符`x`,例如`"$test"x`,...

    Python库 | binary_bits-1.0.0-py3-none-any.whl

    3. **二进制转换**:将位向量转换为整数、浮点数、字节序列或字符串。 4. **位切片和位设置**:允许用户选择位向量的一部分,或者在特定位置设置或清除位。 5. **比较操作**:可能提供比较位向量的方法,如检查相等...

    shell中字符串、数值的比较.rar_shell中字符串、数值的比较

    1. **相等比较**: `==` 或 `=` 用于检查两个字符串是否相等。例如: ```bash str1="Hello" str2="Hello" if [ "$str1" == "$str2" ]; then echo "两者相等" else echo "两者不相等" fi ``` 2. **不等比较*...

    阿里巴巴PHP面试题和答案解析.doc

    因此,选项B中的“json 数据中,还是需要遍历所有字符串才能找到数据”的表述是错误的。 ##### 3. 执行下面代码$x 会变成什么值呢? ```php $x = NULL; if ('0xFF' == 255) { $x = (int)'0xFF'; } ``` - **选项...

    PyPI 官网下载 | bitvector-for-humans-0.8.0.tar.gz

    4. **位向量比较**:可以比较两个位向量是否相等或有无交集,这对于数据筛选和匹配场景非常实用。 5. **转换功能**:可以将位向量转换为整数或字符串形式,便于输出和与其他数据类型交互。 6. **扩展功能**:可能...

    bash笔记-03-流程控制.doc

    =`(分别用于检查字符串是否相等或不相等)。 - **算术比较**:支持基本的算术比较操作符,如 `-eq`、`-ne`、`-gt`、`-lt`、`-ge` 和 `-le`。 - **文件类型**:可以测试文件的各种属性,例如 `-d`(检查是否为目录...

    linux shell编程if语句内判断参数详解

    例如,使用 = 运算符可以判断两个字符串是否相等: ``` if [ "$myvar" = "one two three" ]; then echo "Strings are equal" fi ``` 算术比较运算符 在 Linux Shell 编程中,if 语句也可以使用算术比较运算符来...

    前端项目-should.js.zip

    例如,你可以使用`should.equal`来判断两个值是否相等,`should.be.an('object')`来验证一个值是否是对象类型。这种链式调用方式使得代码更易于阅读和理解,同时也减少了出错的可能性。 在BDD风格的测试中,`should...

    Python库 | semantic_compare-0.9.0.tar.gz

    1. **版本比较**:库提供了函数,可以比较两个语义版本号,判断哪个版本更高或者是否相等。这对于管理依赖关系和更新检查非常有用。 2. **兼容性检查**:在软件开发中,确保新版本与旧版本的兼容性是至关重要的。`...

    Shell字符串比较相等、不相等方法小结

    2. **字符串相等比较**: 使用`=`或`==`都可以检查两个字符串是否相等。它们在`[`或`[[`中表现相同: ```bash if [ "$A" = "$B" ]; then echo "[ = ]"; fi if [ "$A" == "$B" ]; then echo "[ == ]"; fi ``` ...

    Linux c比较金额相等函数.pdf

    - `strcmp`: 比较两个字符串,如果相等返回0,不等则返回非零值,可以用来判断两个金额字符串是否相等。 5. **内存操作函数**: - `memset`: 用特定值填充内存区域。例如,清零数组`memset(a, 0, sizeof(a))`或...

    字符与文件的比较.docx

    1. **相等比较**:`str1 = str2`,用于判断两个字符串是否完全相同。 2. **不等比较**:`str1 != str2`,用于检测两个字符串是否不匹配。 3. **字符串排序比较**:`str1 和 `str1 > str2`,基于ASCII码值进行比较,...

    Linux c比较金额相等函数.docx

    如果需要比较浮点数,可以使用C语言的标准库函数,如`<math.h>`中的`fabs()`函数来获取两个浮点数之间的绝对差值,然后与一个极小值(如`FLT_EPSILON`或`DBL_EPSILON`)比较,判断它们是否相等。 对于金额的处理,...

    shell中条件判断if中的-z到-d的意思.txt

    - `[STRING1 == STRING2]` (字符串相等):用于测试两个字符串`STRING1`和`STRING2`是否相等。 - `[STRING1 != STRING2]` (字符串不等):用于测试两个字符串`STRING1`和`STRING2`是否不相等。 - `[STRING1 ]` (字符串...

    Bash参考手册(Linux Shell),简单的页面中,有BASH的基本用法,非常方便

    - `==` 字符串相等 - `!=` 字符串不相等 - **字符串检查**: - `-z` 检查字符串是否为空 - `-n` 检查字符串是否非空 示例: ```bash num1=10 num2=20 str1="hello" str2="world" if [ "$num1" -eq "$num2" ]; ...

Global site tag (gtag.js) - Google Analytics