(3 respuestas)
Cerrado hace 3 años.
Entonces, ¿por qué funciona lo siguiente, es decir, imprime la coincidencia:
THE_REGEX='^test\/version[0-9]+([.][0-9]+)+$'
if [[ "$SOME_VAR" =~ $THE_REGEX ]]; then
echo "Match!"
fi
Pero lo siguiente NO:
if [[ "$SOME_VAR" =~ '^test\/version[0-9]+([.][0-9]+)+$' ]]; then
echo "Match!"
fi
¿Cuál es la diferencia? Es la misma expresión regular
Respuesta aceptada:
No use comillas simples dentro de [[
:
if [[ "$SOME_VAR" =~ ^test\/version[0-9]+([.][0-9]+)+$ ]]; then
echo "Match!"
fi
Del manual bash de GNU:https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#Conditional-Constructs
Nota en particular:
Se puede citar cualquier parte del patrón para obligar a que la parte citada coincida como una cadena .
El manual parece sugerir que se prefiere usar la variable:
Almacenar la expresión regular en una variable de shell suele ser una forma útil de evitar problemas al citar caracteres que son especiales para el shell. A veces es difícil especificar una expresión regular literalmente sin usar comillas, o hacer un seguimiento de las comillas utilizadas por las expresiones regulares mientras se presta atención a la eliminación de comillas del shell. El uso de una variable de shell para almacenar el patrón disminuye estos problemas.