bash测试-匹配正斜杠

时间:2018-08-31 23:17:44

标签: bash shell pattern-matching conditional

我有一个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 :(得分:2)

[ ]是单括号test(1) command,它不能像bash一样处理模式。而是使用双括号bash conditional expression [[ ]]。示例:

$ current_branch='oleg/feature/1535693040'
$ [ "$current_branch" = '*/feature/*' ] && echo yes
$ [[ $current_branch = */feature/* ]] && echo yes
yes
使用正则表达式

编辑

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

正则表达式可以在任何地方匹配,因此您不需要前导{\ {1}}(在正则表达式中为*)。

注意:这里的斜杠不是正则表达式的分隔符,而是字符串中要匹配的文字。例如,.*返回true。这与许多语言中的正则表达式符号不同。