Usando cláusulas múltiplas em uma instrução IF comparando expressões regulares

0

Estou escrevendo um programa que executa várias tarefas. Eu tenho uma declaração IF que pode estar causando um problema. O script a seguir está correto?

if [[ ! $description =~ "Design" ]] || [[ ! $description =~ "Digital" ]]; then

        echo 'Does not match Design or Digital'
else
        echo 'A match has been found'
fi
    
por Berni 21.09.2017 / 09:59

2 respostas

0

Eu encontrei uma solução para esse problema. Como você mencionou, o steeldriver está sintaticamente correto, mas eu fiz uma modificação no operador na cláusula.

#/bin/bash

description="Advert"

if [[ $description =~ "Design" ]] || [[ $description =~ "Digital" ]]; then

    echo 'Matches Design or Digital'
else
    echo 'Does not match'
fi

Obrigado pelo conselho a todos!

    
por 21.09.2017 / 10:18
0

Para que a mensagem enviada esteja correta no original, o primeiro eco deve ter dito Does not match Design *and* Digital . Uma correspondência teria sido encontrada na string Digital Design , por exemplo.

Ao usar o operador de expressão regular =~ em bash , o lado esquerdo deve ser uma string entre aspas e o lado direito geralmente deve ser deixado sem aspas:

#/bin/bash

description='Advert'

if [[ "$description" =~ Design  ]] ||
   [[ "$description" =~ Digital ]]; then
    echo 'Matches Design or Digital'
else
    echo 'Does not match'
fi

Isso não importa no este caso, mas é o seguinte:

description='Advert'

if [[ "$description" =~ "Ad.*" ]]; then
    echo 'Matches "Ad.*"'
else
    echo 'Does not match'
fi

Isso imprimirá Does not match .

    
por 21.09.2017 / 10:28