读书人

Bash字符串处置(与Java对照) - 10.判

发布时间: 2012-09-28 00:03:35 作者: rapoo

Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)
Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)In JavaString.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。

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

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

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

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

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

?

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


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语句和[[ ]]中有效。


[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.比较两个字符串大小(字典顺序、数值比较)

?

?

读书人网 >操作系统

热点推荐