Wie man Strings in Bash vergleicht
Wir können die Zeichenketten mit verschiedenen Vergleichsoperatoren vergleichen und mit Hilfe der regulären Ausdrücke prüfen, ob die Zeichenkette eine Teilzeichenkette enthält oder nicht.
String-Vergleich in Bash
String-Vergleich bedeutet zu prüfen, ob die gegebenen Zeichenketten gleich sind oder nicht. Zwei oder mehr Zeichenketten sind gleich, wenn sie gleich lang sind und die gleiche Zeichenkette enthalten.
Wir verwenden verschiedene Zeichenketten-Vergleichsoperatoren, die je nach Bedingung wahr oder falsch zurückgeben. Einige der weit verbreiteten Zeichenketten-Vergleichsoperatoren könnten als aufgeführt werden:
string1 = string2 |
Gleichheitsoperator, der mit [ -Befehl verwendet wird und true zurückgibt, wenn beide Operanden gleich sind. |
string1 == string2 |
Gleichheitsoperator, der mit dem Befehl [[ ] verwendet wird und true zurückgibt, wenn beide Operanden gleich sind. |
string1 != string2 |
Ungleichheitsoperator, der true zurückgibt, wenn zwei Operanden ungleich sind. |
string1 =~ regex |
Regex -Operator, der true zurückgibt, wenn die string1 mit dem erweiterten regex übereinstimmt |
string1 > string2 |
Größer als der Operator, der true zurückgibt, wenn die string1 größer als string2 ist, basierend auf der lexikographischen (alphabetischen) Reihenfolge |
string1 < string2 |
Weniger als der Operator, der true zurückgibt, wenn die string1 kleiner als string2 ist, basierend auf der lexikographischen (alphabetischen) Reihenfolge |
-z string |
Geben Sie true zurück, wenn die Länge der string 0 ist. |
-n string |
Geben Sie true zurück, wenn die Länge der string nicht 0 ist. |
String1="Hello World!!"
String2="Hello World!!"
String3="Delft Stack"
if [ "$String1" = "$String2" ]; then
echo "String1 and String2 are equal."
else
echo "String1 and String2 are not equal."
fi
if [[ "$String1" == "$String2" ]]; then
echo "String1 and String2 are equal."
else
echo "String1 and String2 are not equal."
fi
if [[ "$String1" != "$String3" ]]; then
echo "String1 and String3 are not equal."
else
echo "String1 and String3 are equal."
fi
Ausgabe:
String1 and String2 are equal.
String1 and String2 are equal.
String1 and String3 are not equal.
Hier, wenn wir String1
und String2
zunächst mit dem =
Operator vergleichen. Da String1
und String2
beide die gleiche Länge mit der gleichen Zeichenkette haben, gibt der Vergleichsoperator true
zurück, und daher erhalten wir String1 and String2 are equal.
Als Ausgabe des ersten if-else
-Blocks des Programms.
In ähnlicher Weise vergleichen wir im zweiten Programm String1
und String2
unter Verwendung des ==
Operators. In diesem Fall müssen wir zum Vergleich [[
verwenden.
Schließlich vergleichen wir String1
und String3
unter Verwendung des !=
Operators.
Lexikographischer Vergleich in Bash
Lexikographischer Vergleich bedeutet den Vergleich von Zeichenketten auf der Grundlage der alphabetischen Reihenfolge. Für den lexikographischen Vergleich verwenden wir die Operatoren >
und <
.
name1="Kamal"
name2="Abinash"
if [[ "$name1" > "$name2" ]]; then
echo "${name1} is greater then ${name2}."
elif [[ "$name1" < "$name2" ]]; then
echo "${name2} is greater than ${name1}."
else
echo "Both the namees are equal"
fi
Ausgabe:
Kamal is greater then Abinash.
In diesem Programm werden name1
und name2
lexikographisch verglichen. Da K
in der alphabetischen Reihenfolge nach A
kommt, hat K
einen höheren Wert als A
und damit "$name1" > "$name2"
ergibt true
und wir erhalten als Ausgabe Kamal is greater then Abinash.
.
Prüfen, ob ein String leer ist oder nicht
Wir verwenden die Operatoren -n
und -z
, um zu prüfen, ob die Zeichenkette leer ist oder nicht.
String=""
if [[ -z $String ]]; then
echo "The variable String is an empty string."
fi
Ausgabe:
The variable String is an empty string.
In diesem Programm ist String
eine leere Variable. Als -z
-Operator wird true
zurückgegeben, wenn die Länge von String
0
ist, und daher erhalten wir The variable String is an empty string.
als Ausgabe des gegebenen Programms.
String="Test"
if [[ -n $String ]]; then
echo "The variable String is not an empty string."
fi
Ausgabe:
The variable String is not an empty string.
In diesem Programm ist String
keine leere Variable. Der Operator -n
gibt true
zurueck, wenn die Laenge von String
nicht 0
ist, und daher erhalten wir The variable String is not an empty string.
Als Ausgabe des gegebenen Programms.
Prüfen, ob eine Zeichenkette eine Unterzeichenkette enthält
Um zu prüfen, ob eine Zeichenkette eine Teilzeichenkette enthält, können wir den =~
(Regex
) Operator verwenden.
Der regex
-Operator gibt true
zurück, wenn die string
mit dem erweiterten regex
-Ausdruck übereinstimmt. Wir müssen einen geeigneten regex
-Ausdruck für den Vergleich verwenden.
String='My name is Delft.'
if [[ $String =~ .*Delft.* ]]; then
echo "The given string has Delft on it."
fi
Ausgabe:
The given string has Delft on it.
Hier ist .*Delft.*
der zu vergleichende regex
-Ausdruck, der besagt, daß er mit einer beliebigen Zeichenkette, null oder mehr Zeichen, vor und nach .*Delft.*
übereinstimmt. Es wird geprüft, ob die Zeichenkette die Teilzeichenkette Delft
enthält oder nicht.
Wenn Delft
in der gegebenen Zeichenkette vorhanden ist, ist die gegebene Bedingung erfüllt, und wir erhalten The given string has Delft on it.
als Ausgabe.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn