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