Look at this if block:
#!/bin/bash
str="m.m"
if [[ "${str}" =~ "m.m" ]]; then
echo "matched"
else
echo "not matched"
exit 1
fi
exit 0
This should print “matched”, but it doesn’t. Where am I going wrong?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You need to remove the quoting in the regex match.
if [[ ${str} =~ m.m ]]; then
From the bash man page:
[…] An additional binary operator, =~, is available, with the same
precedence as == and !=. When it is used, the string to the
right of the operator is considered an extended regular expres‐
sion and matched accordingly (as in regex(3)). The return value
is 0 if the string matches the pattern, and 1 otherwise. If the
regular expression is syntactically incorrect, the conditional
expression’s return value is 2. If the shell option nocasematch
is enabled, the match is performed without regard to the case of
alphabetic characters. Any part of the pattern may be quoted to
force it to be matched as a string.
So with the quotes, you’re using good-old string matching.
If you need spaces in the pattern, just escape them:
str="m m"
if [[ ${str} =~ m +m ]]; then
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0