Introduzione
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 valori e restituiscono vero o falso. Quando si confrontano le stringhe in Bash è possibile utilizzare i seguenti operatori:
string1 = string2
estring1 == string2
- L'operatore di uguaglianza ritorna vero se gli operandi sono uguali.- Utilizzare l'operatore
=
con il comandotest
[
- Utilizzare l'operatore
==
con il comando[[
per la corrispondenza dei motivi. string1 != string2
- L'operatore di disuguaglianza restituisce vero se gli operandi non sono uguali.string1 =~ regex
- L'operatore regex restituisce true se l'operando di sinistra corrisponde all'espressione regolare estesa a destra.string1 > string2
- L'operatore maggiore di restituisce vero se l'operando di sinistra è maggiore di quello di destra ordinato per ordine lessicografico (alfabetico).string1 < string2
- L'operatore minore di restituisce vero se l'operando destro è maggiore del diritto ordinato per ordine lessicografico (alfabetico).-z string
- Vero se la lunghezza della stringa è zero.-n string
- Vero se la lunghezza della stringa è diversa da zero.
Di seguito sono riportati alcuni punti da notare quando si confrontano le stringhe:
- È necessario utilizzare uno spazio vuoto tra l'operatore binario e gli operandi.
- Utilizzare sempre virgolette doppie attorno ai nomi delle variabili per evitare problemi di divisione delle parole o globbing.
- Bash non separa le variabili per "tipo", le variabili vengono trattate come numeri interi 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 utilizza l'istruzione if e il comando [
test per verificare se le stringhe sono uguali o meno con l'operatore =
:
#!/bin/bash
VAR1="Noviello"
VAR2="Noviello"
if [ "$VAR1" = "$VAR2" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
Quando lo script viene eseguito, verrà stampato il seguente output.
Strings are equal.
Ecco un altro script che accetta l'input dell'utente e confronta le stringhe fornite. In questo esempio, utilizzeremo il comando [[
e l'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: Noviello
Enter second string: Ubuntu
Strings are not equal.
Puoi anche usare le stringhe logiche &&
o ||
per confrontare:
[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
Not equal
Controlla se una stringa contiene una sottostringa
Esistono diversi modi per verificare se una stringa contiene una sottostringa.
Un approccio consiste nel circondare la sottostringa con simboli di asterisco *
che indica una corrispondenza di tutti i caratteri.
#!/bin/bash
VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
echo "It's there."
fi
Lo script farà echo a quanto segue:
It's there.
Un'altra opzione è quella di utilizzare 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 periodo seguito da un asterisco .*
corrisponde a zero o più occorrenze di qualsiasi carattere tranne un carattere di nuova riga.
Controlla se una stringa è vuota
Molto spesso dovrai anche verificare se una variabile è una stringa vuota o meno. Puoi farlo usando gli operatori -n
e -z
.
#!/bin/bash
VAR=''
if [[ -z $VAR ]]; then
echo "String is empty."
fi
String is empty.
#!/bin/bash
VAR='Noviello'
if [[ -n $VAR ]]; then
echo "String is not empty."
fi
String is not empty.
Confronto delle 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 "Noviello matched"
;;
Fedora | CentOS)
echo -n "Red Hat"
;;
esac
Noviello 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 viene usato raramente.
I seguenti script confrontano due stringhe lessicograficamente:
#!/bin/bash
VAR1="Noviello"
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 genererà quanto segue:
Ubuntu is lexicographically greater than Noviello.
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 conoscenza di come confrontare le stringhe in Bash. Puoi anche consultare la nostra guida sulla concatenazione di stringhe.