es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para verificar si alguna subcadena de a se encuentra en b sin recorrer explícitamente la matriz, puedes utilizar el comando printf para unir la matriz en una única cadena y luego utilizar grep para buscar cualquier subcadena de a.

    Aquí tienes un ejemplo de comando:

    if printf '%s\n' "${b[@]}" | grep -qF "$a"; then
      # Algo
    fi
    

    Explicación:

    • printf '%s\n' "${b[@]}" imprime cada elemento de la matriz b en una línea separada
    • | envía la salida de printf al siguiente comando
    • grep -qF "$a" busca cualquier subcadena de a 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 a then.

Comments are closed.