On 10.7. 15:27, Greg Wooledge wrote:
On Mon, Jul 09, 2018 at 10:46:13PM -0300, marcelpa...@gmail.com wrote:
Word boundary anchors \< and \> are not parsed correctly on the right side of a 
=~ regex match expression.

Bash uses ERE (Extended Regular Expressions) here.  There is no \< or \>
in an ERE.

Or does it use the system's regex library, whatever that supports?

On my Linux systems, this prints 'y' (with Bash 4.4.12 and 4.1.2):
re='\<foo\>' ; [[ "foo bar" =~ $re ]] && echo y


If '\<' matches just a regular less-than sign (but has a useless backslash), then surely that should not match?

That's the same example marcelpa...@gmail.com had, they didn't have
the <> signs in the string.

On my Mac, the above doesn't match. The same thing with a similar regex with \w .

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04

This evaluates as false:

     [[ 'foo bar' =~ \<foo\> ]]

Well, of course it does, because \< is just a literal less-than sign
in a POSIX ERE.

wooledg:~$ re='\<foo\>'
wooledg:~$ [[ '<foo>' =~ $re ]] && echo yes
yes

You might as well remove the backslashes, because they serve no purpose
here.  If you thought they meant "word boundary" or something, you're
in the wrong language.



--
Ilkka Virta / itvi...@iki.fi

Reply via email to