bash 测试 - 匹配正斜杠

bash 测试 - 匹配正斜杠

我有一个 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

我在 StackOverflow 上得到了这个问题的答案: https://stackoverflow.com/questions/52123576/bash-test-match-forward-slashes/52123622

答案是:

[ ]是单括号test(1)命令,它处理模式的方式与 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。这与许多语言中的正则表达式表示法不同。

相关内容