/ / Deve uma chave de chamada ser escapada em uma expressão regular? - regex, bash

Uma chave de chaveta deve ser escapada em uma expressão regular? - regex, bash

regex="{foo"; string="{foo"; [[ $string =~ $regex ]] && echo "true"

Este é um script bash que funciona no Bash 3.xe 4.x. Se o "" for removido, ele pára de funcionar no Bash 4.x. Esse comportamento é esperado e / ou um bug? a página de manual do regex (7) sugere que a fuga não é necessária. Os outros sabores de regex requerem que a chave seja escapada?

Respostas:

6 para resposta № 1

A chave de abertura precisa ser escapada, porque denota o início do quantificador - {m,n}. Eu não usei nenhum sabor de regex, onde ele funciona sem fugir {. Mas eu não posso comentar para todos eles, mas a razão é bem lógica.

Pela mesma razão, você precisaria escapar da chave de abertura - [, porque denota o início de uma classe de caracteres.


0 para resposta № 2

o manual diz (ênfase minha):

Um operador binário adicional, ‘=~', Está disponível, com o mesmo precedência como '=='E'!='. Quando é usado, a string para o certo do operador é considerado um expressão regular estendida e correspondido em conformidade.

Como tal, { na regex precisa ser escapou.

No entanto, você pode forçar bash para executar uma comparação de cadeia, citando a cadeia nos rhs do =~ operador.

$ regex="{foo"; string="{foo"; [[ $string =~ "$regex" ]] && echo "true"
true