Error de expresión regular


14
string=123456

if [ $string == 123456 ]; then
echo 123
fi

Esto funciona bien, pero si cambio == a = ~ me sale este error:

./test: line 3: [: =~: binary operator expected

El uso de =~es en este caso incorrecto. =~compara el patrón (lado izquierdo de la tarea) con una expresión regular regexen el lado derecho de la tarea. Una expresión regular en su forma más simple se pasa como'[0-9][0-9]'
— Valentin Bajrami el

99
@ val0x00ff pero 123456es un RE válido
— roaima

@roaima acuerdo, sin embargo expresión regular es conocido por su motor, de vuelta referencias, juego de caracteres, caracteres denotan meta inicial de una serie, el fin de una cadena, etc
— Valentin Bajrami

Respuestas:


28

Lacoincidencia de expresiones regulares de Bash solo funciona entre corchetes dobles[[ ... ]]:

string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123

@Kusalananda: con respecto a la edición, las comillas no son necesarias en el lado izquierdo de una expresión de doble paréntesis [[ ... ]], ya que allí no se divide la palabra ni se expande el nombre de ruta. Solo son necesarios cuando se usan corchetes individuales [ ... ](ambos lados) y en la mano derecha de la expresión de doble corchete.
— user000001

@ user000001 mientras estás en lo correcto, es mucho mejor citar todas las variables por reflejo a menos que sea necesario no hacerlo. Es un hábito mucho más seguro.
— Joe

@ Joe: De acuerdo, en caso de duda, cita ... Solo mencioné esto porque era una edición de una respuesta ya correcta. Si hubiera estado allí desde la primera revisión, no habría comentado sobre esto.
— user000001
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.