Как проверить, что переменная начинается со строки в bash? - PullRequest
28 голосов
/ 09 ноября 2010

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

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

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

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

Ответы [ 2 ]

44 голосов
/ 09 ноября 2010
Оператор

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

var=123
[[ 1234 = $var* ]] && ...
22 голосов
/ 29 июля 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...