On Thursday, January 30, 2014 10:48:34 Chet Ramey wrote: > o. The shell now handles backslashes in regular expression arguments to the > [[ command's =~ operator slightly differently, resulting in more > consistent behavior.
hmm, i seem to be running into a bug here. the bash man page suggests that
the behavior should match regex(3), but it doesn't seem to. consider:
$ cat doit.sh
v="a\-b"
[[ ! a-b =~ ${v} ]]
: $?
# This is expected behavior.
$ bash-4.2_p45 -x ./doit.sh
+ v='a\-b'
+ [[ ! a-b =~ a\-b ]]
+ : 1
# This is unexpected behavior.
$ bash-4.3_rc2 -x ./doit.sh
+ v='a\-b'
+ [[ ! a-b =~ a\\-b ]]
+ : 0
compare that to regex(3) behavior:
$ cat test.c
#include <stdio.h>
#include <regex.h>
int main(int argc, char *argv[]) {
regex_t preg;
int i1 = regcomp(&preg, argv[1], 0);
int i2 = regexec(&preg, argv[2], 0, NULL, 0);
printf("regcomp(%s) = %i\n"
"regexec(%s) = %i\n", argv[1], i1, argv[2], i2);
return 0;
}
$ gcc test.c
$ ./a.out 'a\-b' a-b
regcomp(a\-b) = 0
regexec(a-b) = 0
it had no problem matching ...
-mike
signature.asc
Description: This is a digitally signed message part.
