Wie man Strings in Bash vergleicht

Suraj Joshi 5 November 2020
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 avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn