Здесь версия 'regex' (2015, bash 3.x и новее) ответа Игнасио, с использованием оператора =~
:
[[ "1234" =~ ^12 ]] && echo y
Если вам нужен динамический префикс из переменной:
var=12
[[ "1234" =~ ^$var ]] && echo y
При использовании сложных регулярных выражений вы можете поместить их в собственную переменную:
var=12
var2=a
regex="^${var}.+${var2}.+$"
[[ "1234a567" =~ $regex ]] && echo y
См. Также раздел «Условные конструкции» справочной страницы Bash вкоманда [[
:
Доступен дополнительный двоичный оператор = ~, имеющий тот же приоритет, что и == и! =.Когда это используется, строка справа от оператора считается расширенным регулярным выражением и соответствует соответствующим образом (как в регулярном выражении (3)).Возвращаемое значение равно 0, если строка соответствует шаблону, и 1 в противном случае.Если регулярное выражение синтаксически неверно, возвращаемое значение условного выражения равно 2. Если включена опция оболочки nocasematch, сопоставление выполняется без учета буквенных символов.Подстроки, соответствующие вложенным выражениям в скобках в регулярном выражении, сохраняются в переменной массива BASH_REMATCH.Элемент BASH_REMATCH с индексом 0 является частью строки, соответствующей всему регулярному выражению.Элемент BASH_REMATCH с индексом n является частью строки, соответствующей n-му подвыражению в скобках.