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