Bash regex correspondência não funciona em 4.1

6

Atualizou para o Bash4 e descobriu que não é compatível com expressões regulares:

$ echo $BASH_VERSION
4.1.2(1)-release

$ [[ "20110228" =~ "^[0-9]{8}$" ]] && echo matches

Mas o Bash 3.0 é:

$ echo $BASH_VERSION
3.00.16(1)-release

$ [[ "20110228" =~ "^[0-9]{8}$" ]] && echo matches
matches

Por que isso pode ser? Eu não o instalei corretamente?

    
por dogbane 07.03.2011 / 15:27

1 resposta

7

Verifique esta resposta no SO. Como você está usando a versão 3.00 do bash 3, pode considerar o seu problema. Logo, a partir da versão 3.2, citar o argumento string para o comando [[ do comando =~ força a correspondência de strings, então o padrão correto para o bash 4 deve ser:

$ [[ "20110228" =~ ^[0-9]{8}$ ]] && echo matches
matches
    
por 07.03.2011 / 15:43