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 № 1A 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