Reputation: 16470
I am trying to create a git commit-msg hook, which includes a simple regex to verify the log message. It is not working using the usual bash syntax.
I tried it using a very simple regex, and it is still not working
Any idea what I might be doing wrong?
Here is a simple example including an obvious match, but it is printing out "no match"
#!/bin/bash
message="[GLSD-0000]"
echo "Message: '$message'"
regex="\[GLSD-\w+\]"
if [[ $message =~ $regex ]]; then echo "yes";else echo "no match!"; fi
Using git version 2.18.0.windows.1
Upvotes: 2
Views: 1751
Reputation: 85530
A few things to note from you attempt made,
#!/bin/sh
does not support the regex operation in bash
, even-though you have not used it. You should be using the bourne again shell bash
(#!/usr/bin/env bash)
.[[..]]
with an =
does a string match on left side operand with the right side operand. For regular expression support, you need to use the ~
operatorbash
only supports a minimal version of ERE (Extended Regular expression) in which \w
(all words) is not supported.So in a script targeted for a bash
shell, you should be writing it as
#!/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!"
Upvotes: 4