不区分大小写比较shell脚本中的string

==运算符用于比较shell脚本中的两个string。 但是,我想比较两个string忽略大小写,怎么办呢? 有没有这个标准的命令?

如果你有bash

 str1="MATCH" str2="match" shopt -s nocasematch case "$str1" in $str2 ) echo "match";; *) echo "no match";; esac 

否则,你应该告诉我们你使用的是什么shell。

另外,使用awk

 str1="MATCH" str2="match" awk -vs1="$str1" -vs2="$str2" 'BEGIN { if ( tolower(s1) == tolower(s2) ){ print "match" } }' 

在Bash中,可以使用参数扩展来将string修改为全部小写/大写:

 var1=TesT var2=tEst echo ${var1,,} ${var2,,} echo ${var1^^} ${var2^^} 

所有这些答案忽略了最简单和最快捷的方式来做到这一点(只要你有Bash 4):

 if [ "${var1,,}" = "${var2,,}" ]; then echo ":)" fi 

所有你在做的是将两个string转换为小写字母并比较结果。

与ghostdog74的回答相同,但代码略有不同

 shopt -s nocasematch [[ "foo" == "Foo" ]] && echo "match" || echo "notmatch" shopt -u nocasematch 

一种方法是将两个string转换为上或下:

 test $(echo "string" | /bin/tr '[:upper:]' '[:lower:]') = $(echo "String" | /bin/tr '[:upper:]' '[:lower:]') && echo same || echo different 

另一种方法是使用grep:

 echo "string" | grep -qi '^String$' && echo same || echo different 

对于korn shell,我使用排版内置命令(-l为小写,-u为大写)。

 var=True typeset -l var if [[ $var == "true" ]]; then print "match" fi 
 VAR1 =匹配 
 VAR2 = MATCH 
如果echo $ var1 |  grep -i“^ $ {var2} $”> / dev / null; 然后
  回声“MATCH”
科幻

如果你做一个不区分大小写的行比较,很容易:

 str1="MATCH" str2="match" if [[ $(fgrep -ix $str1 <<< $str2) ]]; then echo "case-insensitive match"; fi 

shopt -s nocaseglob

这是我的解决scheme使用tr:

 var1=match var2=MATCH var1=`echo $var1 | tr '[AZ]' '[az]'` var2=`echo $var2 | tr '[AZ]' '[az]'` if [ "$var1" = "$var2" ] ; then echo "MATCH" fi