为什么Windows上的git commit-msg不匹配正则表达式

时间:2018-12-17 18:15:01

标签: regex bash shell git-bash

我正在尝试创建一个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

1 个答案:

答案 0 :(得分:3)

尝试进行操作时需要注意的几件事,

  1. 您的解释器确实#!/bin/sh不支持bash中的正则表达式操作,即使您没有使用它也是如此。您应该再次使用bourne shell bash#!/usr/bin/env bash)
  2. 带有[[..]]的{​​{1}}在左侧操作数和右侧操作数之间进行字符串匹配。为了支持正则表达式,您需要使用=运算符
  3. ~仅支持ERE(扩展正则表达式)的最低版本,其中不支持bash(所有单词)。

因此,在针对\w shell的脚本中,您应该将其编写为

bash