Подтвердить что ты не робот

Как проверить, что переменная начинается со строки в bash?

Для фиксированной длины префикса я могу сделать это так:

[ a${filename:0:2} = a.# ] && echo temporary emacs file

Как это сделать для произвольного префикса?

Есть ли более чистый способ?

4b9b3361

Ответ 1

Оператор

[[ = принимает шаблон в правом операнде.

var=123
[[ 1234 = $var* ]] && ...

Ответ 2

Здесь версия '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-му подвыражению в скобках.