Erro de condição regex


14
string=123456

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

Isso funciona bem, mas se eu mudar == para = ~ eu recebo este erro:

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

O uso de =~está neste caso errado. =~compara o padrão (lado esquerdo da atribuição) com uma expressão regular regexno lado direito da assinatura. Uma expressão regular em sua forma mais simples é passada como'[0-9][0-9]'
Valentin Bajrami 22/10

9
@ val0x00ff mas 123456é um RE válido
roaima 22/10

@roaima concordou, no entanto regex é conhecida por seu motor, back-referenciação, character-set, meta caracteres que denotam a partir de uma string, terminando de uma corda etc.
Valentin Bajrami

Respostas:


28

Acorrespondência de regex do Bash funciona apenas entre colchetes duplos[[ ... ]]:

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

@Kusalananda: Em relação à edição, as aspas não são necessárias no lado esquerdo de uma expressão entre colchetes [[ ... ]], pois não ocorre divisão de palavras ou expansão de nome de caminho. Eles são necessários apenas ao usar colchetes simples [ ... ](ambos os lados) e no lado direito da expressão de colchete duplo.
user000001

@ user000001 enquanto estiver correto, é muito melhor citar todas as variáveis ​​por reflexo, a menos que seja necessário. É um hábito muito mais seguro.
Joe

@ Joe: Concordo, em caso de dúvida, citação ... Eu só mencionei isso porque era uma edição de uma resposta já correta. Se estivesse lá desde a primeira revisão, não teria comentado isso.
user000001
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.