Der Operator ==
Wird verwendet, um zwei Zeichenfolgen im Shell-Skript zu vergleichen. Ich möchte jedoch zwei Zeichenfolgen vergleichen und dabei die Groß- und Kleinschreibung ignorieren. Wie kann das geschehen? Gibt es einen Standardbefehl dafür?
wenn du bash hast
str1="MATCH"
str2="match"
shopt -s nocasematch
case "$str1" in
$str2 ) echo "match";;
*) echo "no match";;
esac
andernfalls sollten Sie uns mitteilen, welche Shell Sie verwenden.
alternativ mit awk
str1="MATCH"
str2="match"
awk -vs1="$str1" -vs2="$str2" 'BEGIN {
if ( tolower(s1) == tolower(s2) ){
print "match"
}
}'
In Bash können Sie die Parametererweiterung verwenden, um eine Zeichenfolge in Klein-/Großbuchstaben zu ändern:
var1=TesT
var2=tEst
echo ${var1,,} ${var2,,}
echo ${var1^^} ${var2^^}
Alle diese Antworten ignorieren den einfachsten und schnellsten Weg, dies zu tun (solange Sie Bash 4 haben):
if [ "${var1,,}" = "${var2,,}" ]; then
echo ":)"
fi
Alles, was Sie dort tun, ist, beide Zeichenfolgen in Kleinbuchstaben umzuwandeln und die Ergebnisse zu vergleichen.
Wie die Antwort von ghostdog74, aber etwas anderer Code
shopt -s nocasematch
[[ "foo" == "Foo" ]] && echo "match" || echo "notmatch"
shopt -u nocasematch
Eine Möglichkeit wäre, beide Zeichenfolgen in eine obere oder untere umzuwandeln:
test $(echo "string" | /bin/tr '[:upper:]' '[:lower:]') = $(echo "String" | /bin/tr '[:upper:]' '[:lower:]') && echo same || echo different
Ein anderer Weg wäre, grep zu benutzen:
echo "string" | grep -qi '^String$' && echo same || echo different
Für korn Shell verwende ich den eingebauten Befehl typeset (-l für Kleinbuchstaben und -u für Großbuchstaben).
var=True
typeset -l var
if [[ $var == "true" ]]; then
print "match"
fi
Sehr einfach, wenn Sie eine Zeile ohne Berücksichtigung der Groß-/Kleinschreibung erstellen möchten:
str1="MATCH"
str2="match"
if [[ $(fgrep -ix $str1 <<< $str2) ]]; then
echo "case-insensitive match";
fi
Hier ist meine Lösung mit 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
grep
hat ein -i
flag was bedeutet, dass die Groß- und Kleinschreibung nicht beachtet wird. Bitten Sie ihn, Ihnen mitzuteilen, ob var2 in var1 enthalten ist.
var1=match
var2=MATCH
if echo $var1 | grep -i "^${var2}$" > /dev/null ; then
echo "MATCH"
fi
Für zsh
ist die Syntax etwas anders:
> str1='MATCH'
> str2='match'
> [ "$str1" == "$str2:u" ] && echo 'Match!'
Match!
>
Dies konvertiert str2
vor dem Vergleich in Großbuchstaben.
Weitere Beispiele zum Ändern der Groß-/Kleinschreibung finden Sie unten:
> xx=Test
> echo $xx:u
TEST
> echo $xx:l
test
shopt -s nocaseglob