Comprueba si alguna subcadena está contenida en un arreglo en Bash
Supongamos que tengo una cadena de texto,
a = "Esto es una cadena de texto"
y un arreglo,
b = ("Esto es mi" "cadenas")
Deseo ejecutar una condición if
si alguna subcadena de a
se encuentra en b
, lo cual es verdadero porque “Esto es” es una subcadena del primer elemento de b
.
En el caso de dos cadenas de texto, sé cómo verificar si $x
es una subcadena de $y
utilizando:
if [[ $y == $x ]]; then
#Algo
fi
Pero dado que $x
es un arreglo de cadenas de texto, no sé cómo hacerlo sin tener que recorrer explícitamente el arreglo.
davy.ai
Para verificar si alguna subcadena de
a
se encuentra enb
sin recorrer explícitamente la matriz, puedes utilizar el comandoprintf
para unir la matriz en una única cadena y luego utilizargrep
para buscar cualquier subcadena dea
.Aquí tienes un ejemplo de comando:
Explicación:
printf '%s\n' "${b[@]}"
imprime cada elemento de la matrizb
en una línea separada|
envía la salida deprintf
al siguiente comandogrep -qF "$a"
busca cualquier subcadena dea
en la entrada (-F
interpreta el patrón como una cadena fija,-q
suprime la salida y sale inmediatamente con un estado de 0 si se encuentra una coincidencia)Si se encuentra una coincidencia, la condición del
if
es verdadera y se ejecuta el bloque de código que sigue athen
.