On Thu, Apr 15, 2004 at 09:40:05PM +1000, Herbert Xu wrote:
> On Wed, Apr 14, 2004 at 01:59:01PM +0200, Frank K?ster wrote:
> > This is how dash calls it in _some_ subdirectories:
> > 
> > configuring in tetex
> > running /bin/sh ./configure  --prefix=/usr --enable-ipc --without-dialog\
> >   --without-texinfo --with-system-ncurses --with-x --with-system-zlib \
> >   --with-system-pnglib --with-system-tifflib --with-system-wwwlib \
> >   --with-system-t1lib --disable-multiplatform --enable-shared \
> >   --mandir=/usr/share/man --infodir=${prefix}/share/info \
> >   --cache-file=.././config.cache --srcdir=.
> > loading cache .././config.cache
> > 
> > That is, dash replaced the first occurence of ${prefix} by the variable
> > expansion. This shouldn't happen, because it is enclosed in single
> > quotes. 
> 
> This is caused by dash's use of fnmatch(3) which appears to break
> on patterns containing [\]...].
> 
> Here is a sample program to demonstrate it.
> 
> #include <stdio.h>
> #include <fnmatch.h>
> 
> int main(int argc, char **argv)
> {
>       printf("%d\n", fnmatch("[\\]a]", "a", 0));
>       return 0;
> }

fnmatch(3) references glob(7), which says:

   Character classes
       An expression `[...]' where the first character after the lead-
       ing `[' is not an `!' matches a single character, namely any of
       the characters enclosed by the brackets.  The  string  enclosed
       by  the  brackets cannot be empty; therefore `]' can be allowed
       between the brackets, provided that it is the first  character.
       (Thus,  `[][!]' matches the three characters `[', `]' and `!'.)

   ...

       One  can remove the special meaning of `?', `*' and `[' by pre-
       ceding them by a backslash, or, in case this is part of a shell
       command line, enclosing them in quotes.  Between brackets these
       characters stand for themselves.  Thus,  `[[?*\]'  matches  the
       four characters `[', `?', `*' and `\'.

Accordingly, I believe that the pattern in your example means
"backslash, followed by a, followed by closing square bracket", not what
you think it means.

-- 
Colin Watson                                  [EMAIL PROTECTED]


Reply via email to