演算子は、シェルスクリプトの==
2つの文字列を比較するために使用されます。しかし、大文字と小文字を区別せずに2つの文字列を比較したいのですが、どうすればよいでしょうか。このための標準的なコマンドはありますか?
質問する
236023 次
14 に答える
160
これらの回答はすべて、これを行う最も簡単で迅速な方法を無視しています (Bash 4 を使用している場合)。
if [ "${var1,,}" = "${var2,,}" ]; then
echo ":)"
fi
そこで行っているのは、両方の文字列を小文字に変換し、結果を比較することだけです。
于 2014-12-28T19:13:42.557 に答える
87
バッシュがある場合
str1="MATCH"
str2="match"
shopt -s nocasematch
case "$str1" in
$str2 ) echo "match";;
*) echo "no match";;
esac
それ以外の場合は、使用しているシェルをお知らせください。
代替、awk の使用
str1="MATCH"
str2="match"
awk -vs1="$str1" -vs2="$str2" 'BEGIN {
if ( tolower(s1) == tolower(s2) ){
print "match"
}
}'
于 2009-11-13T12:02:47.617 に答える
45
状態を保存しますnocasematch
(他の機能が無効になっていることに依存している場合):
local orig_nocasematch=$(shopt -p nocasematch; true)
shopt -s nocasematch
[[ "foo" == "Foo" ]] && echo "match" || echo "notmatch"
$orig_nocasematch
local
関数内でのみ必要であることに注意してください。
また、パーツは、がオンで失敗し; true
たときにシェルが終了するのを防ぎます (nocasematch がまったく設定されていないため)。set -e
$(shopt -p nocasematch)
于 2013-01-03T11:45:50.500 に答える
21
1 つの方法は、両方の文字列を上位または下位に変換することです。
test $(echo "string" | /bin/tr '[:upper:]' '[:lower:]') = $(echo "String" | /bin/tr '[:upper:]' '[:lower:]') && echo same || echo different
もう 1 つの方法は、grep を使用することです。
echo "string" | grep -qi '^String$' && echo same || echo different
于 2009-11-13T11:52:35.140 に答える
4
trを使用した私のソリューションは次のとおりです。
var1=match
var2=MATCH
var1=`echo $var1 | tr '[A-Z]' '[a-z]'`
var2=`echo $var2 | tr '[A-Z]' '[a-z]'`
if [ "$var1" = "$var2" ] ; then
echo "MATCH"
fi
于 2016-05-09T19:01:59.223 に答える
4
grep
-i
には大文字と小文字が区別されないことを意味するフラグがあるため、var2 が var1 にあるかどうかを確認してください。
var1=match
var2=MATCH
if echo $var1 | grep -i "^${var2}$" > /dev/null ; then
echo "MATCH"
fi
于 2010-04-27T20:00:23.960 に答える
0
shopt -s nocaseglob
于 2009-11-13T11:38:38.327 に答える