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
Iluminar
fuente
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
RomanPerekhrest
fuente
@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