Почему git commit-msg в Windows не соответствует регулярному выражению

Я пытаюсь создать ловушку 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 обычно не поддерживает универсальные символьные типы в стиле Perl, такие как \w. Вместо этого прочтите Расширенные регулярные выражения POSIX (или обратитесь к man re_format, если он доступен на вашем локальном компьютере).

chepner 17.12.2018 19:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
1 059
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Несколько замечаний по вашей попытке,

  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!"

Кроме того, /bin/sh изначально не поддерживает [[ ]].

Benjamin W. 17.12.2018 19:43

И разве 1, вероятно, не должен быть $1? 1 всегда буквенно-цифровой, и тест не имеет смысла.

Benjamin W. 17.12.2018 19:44

Спасибо @BenjaminW. . Я оставлю это оператору, чтобы использовать его по своему усмотрению.

Inian 17.12.2018 19:50

Приносим извинения за ошибки в транскрипции. См. Исправленный

Victor Grazi 17.12.2018 20:06

@VictorGrazi: обновлено в соответствии с вашим примером

Inian 18.12.2018 04:22

Другие вопросы по теме