为啥 Windows 上的 git commit-msg 与正则表达式不匹配
Posted
技术标签:
【中文标题】为啥 Windows 上的 git commit-msg 与正则表达式不匹配【英文标题】:Why do git commit-msg on Windows not match regex为什么 Windows 上的 git commit-msg 与正则表达式不匹配 【发布时间】:2019-05-18 03:45:10 【问题描述】:我正在尝试创建一个 git commit-msg 挂钩,其中包括一个简单的正则表达式来验证日志消息。它不能使用通常的 bash 语法。
我用一个非常简单的正则表达式试了一下,还是不行
知道我做错了什么吗?
这是一个包含明显匹配的简单示例,但它打印出“不匹配”
#!/bin/bash
message="[GLSD-0000]"
echo "Message: '$message'"
regex="\[GLSD-\w+\]"
if [[ $message =~ $regex ]]; then echo "yes";else echo "no match!"; fi
使用 git 版本 2.18.0.windows.1
【问题讨论】:
Bash 通常不支持像\w
这样的 Perl 风格的通用字符类型。改为阅读POSIX extended regular expressions(或咨询man re_format
,如果您的本地计算机上可用)。
【参考方案1】:
您尝试做的一些注意事项,
-
您的解释器确实
#!/bin/sh
不支持bash
中的正则表达式操作,即使您没有使用它。你应该再次使用 bourne shell bash
(#!/usr/bin/env bash)
.
[[..]]
和 =
对左侧操作数与右侧操作数进行字符串匹配。对于正则表达式支持,您需要使用~
运算符
bash
仅支持 ERE(扩展正则表达式)的最小版本,其中不支持 \w
(所有单词)。
因此,在针对bash
shell 的脚本中,您应该将其编写为
#!/usr/bin/env bash
# equivalent of '\w' in the regex flavor supported by bash
re='\[GLSD-[A-Za-z0-9_]+\]'
msg='[GLSD-0000]'
[[ $msg =~ $re ]] && echo "yes" || echo "no match!"
【讨论】:
另外,/bin/sh
不支持 [[ ]]
开头。
不应该1
可能是$1
? 1
始终是字母数字,测试没有意义。
谢谢@BenjaminW。 .我会让 OP 随意使用它。
抱歉出现一些转录错误。请看更正
@VictorGrazi:已更新以匹配您的示例以上是关于为啥 Windows 上的 git commit-msg 与正则表达式不匹配的主要内容,如果未能解决你的问题,请参考以下文章
为啥有人应该在 git commit 之前使用 git add?或者为啥有人应该使用 git add 呢?