【问题标题】:regex work on Regex101 but doesn't work on bash [duplicate]正则表达式适用于 Regex101,但不适用于 bash [重复]
【发布时间】:2019-01-29 16:43:36
【问题描述】:

我正在设置一个钩子,我需要评估一个正则表达式,但我不知道为什么不能在 bash 中使用正则表达式,我检查了 commit-msg 中的格式

MSG = "$1"
FEAT='(feat)(\:\sRQ)([0-9])+(_)(([A-Z][a-z]+)+)'
if [[ MSG =~ TEST ]]  ; then      
   echo "yeah!!"
else            
echo "oops"
exit 1
fi   

这是一个有效的提交消息功能:RQ00_Hello

【问题讨论】:

  • 输入实际上是什么样的?
  • MSG 是提交信息,我做了 git commit -m "feat: RQ00_Hello"
  • @xra,配置“Regex101”或任何你正在测试的 POSIX ERE 语法。 Bash 使用标准 C 库进行正则表达式匹配,因此如果您的本地平台有扩展,您有时会获得不可移植的、仅限本地操作系统的额外功能,但唯一能保证工作的是在pubs.opengroup.org/onlinepubs/009695399/basedefs/…,第 9.4 节(“扩展正则表达式”)。

标签: linux bash hook


【解决方案1】:

我确定 \: 是不必要的,并且相信 bash 不理解 \s

P.S.:顺便说一句,您还需要在第一行中丢失 = 周围的空格...测试中的变量缺少 $ 和 $TEST != $FEAT

【讨论】:

  • bash 肯定 不保证理解 POSIX ERE 以外的任何内容,\s 不是该规范的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
相关资源
最近更新 更多