Introduzione

Una delle operazioni più comuni quando si lavora con stringhe in Bash è determinare se una stringa contiene o meno un'altra stringa.

In questo articolo, ti mostreremo diversi modi per verificare se una stringa contiene una sottostringa.

Utilizzando i caratteri jolly

L'approccio più semplice è circondare la substring con i simboli jolly asterisco (asterisco) * e confrontarla con la stringa. Il carattere jolly è un simbolo utilizzato per rappresentare zero, uno o più caratteri.

Se il test ritorna true, la substring è contenuta nella stringa.

Nell'esempio seguente stiamo usando l' istruzione if e l'operatore di uguaglianza ( ==) per verificare se la sottostringa SUB si trova all'interno della stringa STR:

#!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'
if [[ "$STR" == *"$SUB"* ]]; then
  echo "Exists!"
fi

Eseguito, lo script genererà:

Exists!

Utilizzando l'operatore del caso

Invece di usare l'istruzione if puoi anche usare l' istruzione case per verificare se una stringa include o meno un'altra stringa.

#!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'

case $STR in

  *"$SUB"*)
    echo -n "Exists!"
    ;;
esac

Utilizzo dell'operatore Regex

Un'altra opzione per determinare se si verifica una sottostringa specificata all'interno di una stringa consiste nell'utilizzare l'operatore regex =~. Quando viene utilizzato questo operatore, la stringa corretta viene considerata come un'espressione regolare.

Il periodo seguito da un asterisco .*corrisponde a zero o più occorrenze di qualsiasi carattere tranne un carattere di nuova riga.

#!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'

if [[ "$STR" =~ .*"$SUB".* ]]; then
  echo "Exists!"
fi

Lo script ritornerà il seguente messaggio:

Exists!

Utilizzando Grep

Il comando grep può anche essere usato per trovare stringhe in un'altra stringa.

Nel seguente esempio, stiamo passando la stringa $STR come input in grep e controllando se la stringa $SUB si trova all'interno della stringa di input. Il comando restituirà true o false.

#!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'

if grep -q "$SUB" <<< "$STR"; then
  echo "Exists!"
fi

L'opzione  -q dice a grep di omettere l'output.

Conclusione

Controllare se una stringa contiene una sottostringa è una delle operazioni più basilari e utilizzate di frequente negli script Bash.

Dopo aver letto questo tutorial, dovresti avere una buona conoscenza di come verificare se una stringa include un'altra stringa. Puoi anche usare altri comandi come awk o sed per i test.

Se hai domande o feedback, non esitare a lasciare un commento.