Я пишу программу на bash, которая выполняет различные задачи. У меня есть оператор IF, который может вызвать проблему. Правильно ли следующий сценарий?
if [[ ! $description =~ "Design" ]] || [[ ! $description =~ "Digital" ]]; then
echo 'Does not match Design or Digital'
else
echo 'A match has been found'
fi
Я нашел решение этой проблемы. Как вы упомянули steeldriver, это синтаксически правильно, но я внес изменения в оператор в предложении.
#/bin/bash
description="Advert"
if [[ $description =~ "Design" ]] || [[ $description =~ "Digital" ]]; then
echo 'Matches Design or Digital'
else
echo 'Does not match'
fi
Всем спасибо за советы!
Чтобы выведенное сообщение было правильным в оригинале, первое эхо должно было сказать 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
.