bash测试 - 匹配正斜杠

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,任何人都知道为什么?

答案

[ ]是单支架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

正则表达式可以匹配任何地方,所以你不需要前导和尾随*(在正则表达式中将是.*)。

注意:这里的斜杠不是正则表达式的分隔符,而是字符串中匹配的文字。例如,[[ foo/bar =~ / ]]返回true。这与许多语言中的正则表达式不同。

以上是关于bash测试 - 匹配正斜杠的主要内容,如果未能解决你的问题,请参考以下文章

什么时候发现报告路径中的双正斜杠?

双正斜杠是不是指示 IE 使用特定的 css?

Bash Shell中的通配符及转义字符的使用

JAVA正则表达式代码

VS下的C++代码引用文件时文件路径要用正斜杠“/”,而不能用反斜杠““

如何从日期用逗号替换正斜杠[重复]