From e86720190efc6550086e6a733394cb393cd0da4d Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 15 May 2015 09:35:24 +0100 Subject: 35131: allow "[]" to match empty character set. This only works if there's no further "]" in the pattern, since if there is the first "]" has to match a literal character. --- Src/pattern.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'Src/pattern.c') diff --git a/Src/pattern.c b/Src/pattern.c index 05dcb2943..4e5e8a110 100644 --- a/Src/pattern.c +++ b/Src/pattern.c @@ -1405,7 +1405,16 @@ patcomppiece(int *flagp, int paren) starter = patnode(P_ANYBUT); } else starter = patnode(P_ANYOF); - if (*patparse == Outbrack) { + /* + * []...] means match a "]" or other included characters. + * However, to be a bit helpful and for compatibility + * with other shells, don't take in that sense if + * there's no further "]". That's still imperfect, + * but it's all we can do --- we're required to + * treat [$var]*[$var]with empty var as [ ... ] + * containing "]*[". + */ + if (*patparse == Outbrack && strchr(patparse+1, Outbrack)) { patparse++; patadd(NULL, ']', 1, PA_NOALIGN); } -- cgit v1.2.3