Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #14308 > unrolled thread

Re: Word boundary anchors \< and \> not parsed correctly on the right side of =~

Started byIlkka Virta <itvirta@iki.fi>
First post2018-07-10 15:52 +0300
Last post2018-07-10 15:52 +0300
Articles 1 — 1 participant

Back to article view | Back to gnu.bash.bug

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: Word boundary anchors \< and \> not parsed correctly on the right side of =~ Ilkka Virta <itvirta@iki.fi> - 2018-07-10 15:52 +0300

#14308 — Re: Word boundary anchors \< and \> not parsed correctly on the right side of =~

FromIlkka Virta <itvirta@iki.fi>
Date2018-07-10 15:52 +0300
SubjectRe: Word boundary anchors \< and \> not parsed correctly on the right side of =~
Message-ID<mailman.3367.1531227154.1292.bug-bash@gnu.org>
On 10.7. 15:27, Greg Wooledge wrote:
> On Mon, Jul 09, 2018 at 10:46:13PM -0300, marcelpaulo@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 marcelpaulo@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 / itvirta@iki.fi

[toc] | [standalone]


Back to top | Article view | gnu.bash.bug


csiph-web