bash test - сопоставить слэши - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть имя ветки git:

current_branch='oleg/feature/1535693040'

Я хочу проверить, включает ли название ветви / feature /, поэтому я использую:

if [ "$current_branch" != */feature/* ] ; then
  echo "Current branch does not seem to be a feature branch by name, please check, and use --force to override.";
  exit 1;
fi

но это имя ветки не соответствует регулярному выражению, поэтому я выхожу с 1, кто-нибудь знает почему?

1 Ответ

0 голосов
/ 01 сентября 2018

[ ] - это команда 1003 *, заключенная в одиночную скобку, которая не обрабатывает шаблоны так же, как bash. Вместо этого используйте условное выражение двойной скобки bash [[ ]]. Пример:

$ current_branch='oleg/feature/1535693040'
$ [ "$current_branch" = '*/feature/*' ] && echo yes
$ [[ $current_branch = */feature/* ]] && echo yes
yes

Редактировать с регулярными выражениями:

$ [[ $current_branch =~ /feature/ ]] && echo yes
yes

Регулярное выражение может совпадать где угодно, поэтому вам не нужны ведущий и конечный * (который в регулярном выражении будет .*).

ВНИМАНИЕ: косые черты здесь - это не разделители для регулярного выражения, а литералы для сопоставления где-то в строке. Например, [[ foo/bar =~ / ]] возвращает true. Это отличается от обозначения регулярных выражений во многих языках.

...