¿Cómo comprobar si una variable de Bash contiene una determinada cadena de texto?

En un script de bash tengo una cadena definida de la siguiente manera:

string=`echo Mi cadena`

¿Cómo puedo comprobar mediante código si esa cadena contiene otra cadena especificada? Algo como lo siguiente, pero sustituyendo ?? por algún operador, alguna expresión o algo que funcione:

if [ $string ?? 'lo que sea' ] then;
  echo "La cadena está contenida en la variable";
fi;

También podría usar grep, pero me parece una solución un poco engorrosa:

if [ `echo $string || grep 'lo que sea' ` ] then;
  echo "La cadena está contenida en la variable";
fi;
Estás leyendo una traducción autorizada de la pregunta String contains in bash planteada por davidsheldon en StackOverflow.

Respuestas

#1

Este es el código que puedes utilizar (fíjate bien en los asteriscos y los dobles corchetes):

string='Mi cadena';
 
if [[ $string == *lo que sea* ]]
then
  echo "La cadena está contenida en la variable";
fi

Si lo prefieres, también puedes utilizar esta otra solución basada en expresiones regulares:

string='Mi cadena';
 
if [[ $string =~ "lo que sea" ]]
then
   echo "La cadena está contenida en la variable"
fi