不区分大小写比较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