совпадение с регулярным выражением bash в разных версиях bash ведет себя по-разному
Очевидно, что это так.
В bash версии 3.2 сравнение с регулярным выражением приводит к ложному
Это не совсем правильно.Вы указываете, что статус выхода равен 2, что говорит о том, что данный шаблон синтаксически неверен.Да, это результат ошибки, и в логическом контексте статус будет рассматриваться как ложный, но это не означает, что строка не соответствует шаблону.Скорее, это говорит о том, что никакая попытка сопоставления с регулярным выражением не была выполнена вообще.
Я не уверен, где найти руководство для Bash 3.2, которое довольно старое, но не безумно, что оно отклоняет пустые регулярные выражения.Вы должны быть в состоянии обойти эту проблему, обрабатывая регистр пустых регулярных выражений специально:
[[ -z "${b}" ]] || [[ "${a}" =~ "${b}" ]]
echo $?
Обратите внимание, однако, что цитирование регулярного выражения приводит к тому, что оно рассматривается как обычная строка.Если вы хотите проверить, отображается ли простая строка, хранящаяся в переменной b
, в качестве подстроки той, которая хранится в a
, то вы также можете сделать это с помощью выражения case
:
case $a in
*${b}*) echo "it matches" ;;
*) echo "it doesn't match" ;;
esac