Confronta le stringhe in Bash

Suraj Joshi 12 aprile 2021
Confronta le stringhe in Bash

Possiamo confrontare le stringhe utilizzando vari operatori di confronto e verificare se la stringa contiene sottostringa o meno utilizzando le espressioni regolari.

Confronto di stringhe in Bash

Confronto di stringhe significa controllare se le stringhe fornite sono uguali o meno. Due o più stringhe sono uguali se hanno la stessa lunghezza e contengono la stessa sequenza di caratteri.

Usiamo vari operatori di confronto di stringhe che restituiscono vero o falso a seconda della condizione. Alcuni degli operatori di confronto tra stringhe ampiamente utilizzati potrebbero essere elencati come:

string1 = string2 Operatore di uguaglianza utilizzato con il comando [ e restituisce true se entrambi gli operandi sono uguali.
string1 == string2 Operatore di uguaglianza utilizzato con il comando [[ e restituisce true se entrambi gli operandi sono uguali.
string1 != string2 Operatore di disuguaglianza che restituisce true se due operandi non sono uguali.
string1 =~ regex Operatore Regex che restituisce true se la string1 corrisponde alla regex estesa
string1 > string2 Operatore maggiore di che restituisce true se string1 è maggiore di string2 in base all’ordine lessicografico (alfabetico)
string1 < string2 Operatore minore di che restituisce true se string1 è minore di string2 in base all’ordine lessicografico (alfabetico)
-z string Restituisce true se la lunghezza di string è 0.
-n string Restituisce true se la lunghezza di string non è 0.
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

Produzione:

String1 and String2 are equal.
String1 and String2 are equal.
String1 and String3 are not equal.

Qui, se confrontiamo String1 e String2 usando inizialmente l’operatore =. Poiché String1 e String2 hanno entrambe la stessa lunghezza con la stessa sequenza di caratteri, l’operatore di confronto restituisce true e quindi otteniamo String1 and String2 are equal.. come output dal primo blocco if-else del programma.

Allo stesso modo, nel secondo programma, confrontiamo String1 e String2 utilizzando l’operatore ==. Dobbiamo usare [[ per il confronto in questo caso.

Infine, confrontiamo String1 e String3 utilizzando l’operatore !=.

Confronto lessicografico in Bash

Confronto lessicografico significa confrontare le stringhe in base all’ordine alfabetico. Per il confronto lessicografico, utilizziamo gli operatori > e <.

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

Produzione:

Kamal is greater then Abinash.

In questo programma, name1 e name2 vengono confrontati lessicograficamente. Poiché K viene dopo A in ordine alfabetico, K ha un valore più alto di A e quindi "$name1" > "$name2" restituisce true e otteniamo come output Kamal is greater then Abinash..

Controlla se una stringa è vuota o meno

Usiamo gli operatori -n e -z per verificare se la stringa è vuota o meno.

String=""
if [[ -z $String ]]; then
  echo "The variable String is an empty string."
fi

Produzione:

The variable String is an empty string.

In questo programma, String è una variabile vuota. Poiché l’operatore -z restituisce true se la lunghezza di String è 0 e quindi otteniamo The variable String is an empty string. come output del programma dato.

String="Test"
if [[ -n $String ]]; then
  echo "The variable String is not an empty string."
fi

Produzione:

The variable String is not an empty string.

In questo programma, String non è una variabile vuota. Poiché l’operatore -n restituisce true se la lunghezza di String non è 0 e quindi otteniamo The variable String is not an empty string. come output del programma dato.

Controlla se una stringa contiene una sottostringa

Per verificare se una stringa contiene una sottostringa, possiamo usare l’operatore =~ (Regex).

L’operatore regex restituisce true se la stringa corrisponde all’espressione estesa regex. Dobbiamo fare un’espressione regex appropriata per il confronto.

String='My name is Delft.'
if [[ $String =~ .*Delft.* ]]; then
  echo "The given string has Delft on it."
fi

Produzione:

The given string has Delft on it.

Qui, .*Delft.* È l’espressione regex da trovare, che dice corrisponde a qualsiasi stringa, zero o più caratteri, prima e dopo Delft.. Controlla se la stringa contiene o meno la sottostringa Delft.

Poiché Delft è presente nella stringa data, la condizione data è soddisfatta e otteniamo The given string has Delft on it.. come uscita.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn