Согласно руководству по Bash:
Доступен дополнительный бинарный оператор '= ~' с тем же приоритетом, что и '==' и '!знак равно Когда это используется, строка справа от оператора считается расширенным регулярным выражением и соответствует соответствующим образом (как в regex3)). Возвращаемое значение равно 0, если строка соответствует шаблону, и 1 в противном случае. Если регулярное выражение синтаксически неверно, возвращаемое значение условного выражения равно 2. Если включена опция оболочки nocasematch (см. Описание shopt в The Shopt Builtin), сопоставление выполняется без учета буквенных символов. Любая часть шаблона может быть заключена в кавычки, чтобы принудительно сопоставить указанную часть в виде строки.
Таким образом, ваши кавычки вокруг регулярного выражения приводят к тому, что все регулярное выражение рассматривается как простое совпадение строк. Кроме того, существует множество разновидностей регулярных выражений, и ?:
Не поддерживается regex(3)
- вам просто нужно просмотреть руководство, чтобы увидеть, какой аромат поддерживает какой-либо конкретный инструмент, к сожалению.
В вашем конкретном случае вы можете использовать что-то вроде
$ [[ 'Comment 1: abcas' =~ (Comment [0-9]*: )(.*) ]] && echo ${BASH_REMATCH[2]}
abcas