Использование нескольких предложений в операторе IF для сравнения регулярных выражений

Я пишу программу на bash, которая выполняет различные задачи. У меня есть оператор IF, который может вызвать проблему. Правильно ли следующий сценарий?

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

        echo 'Does not match Design or Digital'
else
        echo 'A match has been found'
fi
0
21.09.2017, 11:38
2 ответа

Я нашел решение этой проблемы. Как вы упомянули steeldriver, это синтаксически правильно, но я внес изменения в оператор в предложении.

#/bin/bash

description="Advert"

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

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

Всем спасибо за советы!

0
28.01.2020, 04:39

Чтобы выведенное сообщение было правильным в оригинале, первое эхо должно было сказать Does not match Design *and* Digital. Например, совпадение было бы найдено в строке Digital Design.


При использовании оператора регулярного выражения =~в bashлевая часть должна быть заключена в кавычки, а правая часть обычно не должна заключаться в кавычки:

#/bin/bash

description='Advert'

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

Это не имеет значения в этом случае, но имеет значение в следующем:

description='Advert'

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

Будет напечатано Does not match.

0
28.01.2020, 04:39

Теги

Похожие вопросы