Почему git commit-msg в Windows не соответствует регулярному выражению - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь создать перехват 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 голосов
/ 17 декабря 2018

Несколько замечаний по вашей предпринятой попытке:

  1. Ваш интерпретатор #!/bin/sh не поддерживает операцию регулярного выражения в bash, даже если вы ее не использовали.Вы должны использовать оболочку bourne again bash (#!/usr/bin/env bash).
  2. * [[..]] с = сопоставляет строку с левым операндом с правым операндом. Для поддержки регулярных выражений:вам необходимо использовать оператор ~
  3. bash поддерживает только минимальную версию ERE (расширенное регулярное выражение), в которой \w (все слова) не поддерживается.

Таким образом, в сценарии, предназначенном для оболочки bash, вы должны записать его как

#!/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!"
...