Quando si scrivono script Bash è spesso necessario confrontare due stringhe per verificare se sono uguali o meno. Due stringhe sono uguali quando hanno la stessa lunghezza e contengono la stessa sequenza di caratteri.
Questo tutorial descrive come confrontare le stringhe in Bash.
Operatori di confronto #
Gli operatori di confronto sono operatori che confrontano i valori e restituiscono true o false. Quando confronti le stringhe in Bash puoi usare i seguenti operatori:
string1 = string2
estring1 == string2
- L'operatore di uguaglianza restituisce true se gli operandi sono uguali.- Usa il
=
operatore con iltest
[
comando. - Usa il
==
operatore con il[[
comando per la corrispondenza dei modelli.
- Usa il
string1 != string2
- L'operatore di disuguaglianza restituisce true se gli operandi non sono uguali.string1 =~ regex
- L'operatore regex restituisce true se l'operando sinistro corrisponde all'espressione regolare estesa a destra.string1 > string2
- L'operatore maggiore di restituisce true se l'operando sinistro è maggiore di quello destro ordinato per ordine lessicografico (alfabetico).string1 < string2
- L'operatore minore di restituisce true se l'operando destro è maggiore di quello destro ordinato per ordine lessicografico (alfabetico).-z string
- Vero se la lunghezza della stringa è zero.-n string
- True se la lunghezza della stringa è diversa da zero.
Di seguito sono riportati alcuni punti da notare quando si confrontano le stringhe:
- Deve essere utilizzato uno spazio vuoto tra l'operatore binario e gli operandi.
- Utilizza sempre le virgolette tra i nomi delle variabili per evitare problemi di suddivisione delle parole o di globbing.
- Bash non separa le variabili per "tipo", le variabili vengono trattate come intere o stringhe a seconda del contesto.
Controlla se due stringhe sono uguali #
Nella maggior parte dei casi, quando si confrontano le stringhe, si desidera verificare se le stringhe sono uguali o meno.
Lo script seguente usa l'istruzione if e il test [
comando per verificare se le stringhe sono uguali o meno a =
operatore:
#!/bin/bash
VAR1="Linuxize"
VAR2="Linuxize"
if [ "$VAR1" = "$VAR2" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
Quando lo script viene eseguito, stamperà il seguente output.
Strings are equal.
Ecco un altro script che prende l'input dall'utente e confronta le stringhe fornite. In questo esempio useremo il [[
comando e ==
operatore.
#!/bin/bash
read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2
if [[ "$VAR1" == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
Esegui lo script e inserisci le stringhe quando richiesto:
Enter first string: Linuxize
Enter second string: Ubuntu
Strings are not equal.
Puoi anche usare la logica e &&
e o ||
per confrontare le stringhe:
[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
Not equal
Verifica se una stringa contiene una sottostringa #
Esistono diversi modi per verificare se una stringa contiene una sottostringa.
Un approccio consiste nell'utilizzare circondare la sottostringa con simboli di asterisco *
il che significa corrisponde a tutti i caratteri.
#!/bin/bash
VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
echo "It's there."
fi
Lo script farà eco a quanto segue:
It's there.
Un'altra opzione è usare l'operatore regex =~
come mostrato di seguito:
#!/bin/bash
VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
echo "It's there."
fi
Il punto seguito da un asterisco .*
corrisponde a zero o più occorrenze qualsiasi carattere tranne un carattere di nuova riga.
Verifica se una stringa è vuota #
Molto spesso dovrai anche controllare se una variabile è una stringa vuota o meno. Puoi farlo usando il -n
e -z
operatori.
#!/bin/bash
VAR=''
if [[ -z $VAR ]]; then
echo "String is empty."
fi
String is empty.
#!/bin/bash
VAR='Linuxize'
if [[ -n $VAR ]]; then
echo "String is not empty."
fi
String is not empty.
Confronto di stringhe con l'operatore Case #
Invece di usare gli operatori di test puoi anche usare l'istruzione case per confrontare le stringhe:
#!/bin/bash
VAR="Arch Linux"
case $VAR in
"Arch Linux")
echo -n "Linuxize matched"
;;
Fedora | CentOS)
echo -n "Red Hat"
;;
esac
Linuxize matched.
Confronto lessicografico #
Il confronto lessicografico è un'operazione in cui due stringhe vengono confrontate in ordine alfabetico confrontando i caratteri in una stringa in sequenza da sinistra a destra. Questo tipo di confronto è usato raramente.
I seguenti script confrontano lessicograficamente due stringhe:
#!/bin/bash
VAR1="Linuxize"
VAR2="Ubuntu"
if [[ "$VAR1" > "$VAR2" ]]; then
echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
echo "${VAR2} is lexicographically greater than ${VAR1}."
else
echo "Strings are equal"
fi
Lo script produrrà quanto segue:
Ubuntu is lexicographically greater than Linuxize.
Conclusione #
Il confronto delle stringhe è una delle operazioni più basilari e utilizzate di frequente negli script Bash. Dopo aver letto questo tutorial, dovresti avere una buona comprensione di come confrontare le stringhe in Bash. Puoi anche consultare la nostra guida sulla concatenazione di stringhe.
Se hai domande o feedback, sentiti libero di lasciare un commento.