Посмотрите на это, если блок:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Это должно напечатать "совпало", но это не так. Куда я иду не так?
Посмотрите на это, если блок:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
Это должно напечатать "совпало", но это не так. Куда я иду не так?
Ответы:
Вы должны удалить цитату в регулярном выражении.
if [[ ${str} =~ m\.m ]]; then
Со страницы руководства bash:
[...] Доступен дополнительный двоичный оператор = ~, имеющий тот же приоритет, что и == и! =. Когда она используется, строка справа от оператора считается расширенным регулярным выражением и сопоставляется соответствующим образом (как в регулярном выражении (3)). Возвращаемое значение равно 0, если строка соответствует шаблону, и 1 в противном случае. Если регулярное выражение синтаксически неверно, возвращаемое значение условного выражения равно 2. Если включена опция оболочки nocasematch, сопоставление выполняется без учета буквенных символов. Любая часть шаблона может быть заключена в кавычки, чтобы ее можно было сопоставить как строку.
Таким образом, в кавычках вы используете старое доброе совпадение строк.
Если вам нужны пробелы в шаблоне, просто избегайте их:
str="m m"
if [[ ${str} =~ m\ +m ]]; then
\
.
${str} =~ "needle"[0-9]{1}
или я должен использовать ${str} =~ needle[0-9]{1}
?