glob - Globbing pathnames


     Long ago, in Unix V6, there was  a  program  /etc/glob  that
     would expand wildcard patterns.  Soon afterwards this became
     a shell built-in.

     These days there is also a library routine glob(3) that will
     perform this function for a user program.

     The rules are as follows (POSIX 1003.2, 3.13).


     A string is a wildcard pattern if it  contains  one  of  the
     characters  `?',  `*' or `['. Globbing is the operation that
     expands a wildcard pattern into the list of pathnames match-
     ing the pattern. Matching is defined by:

     A `?' (not between brackets) matches any single character.

     A `*' (not between brackets) matches any  string,  including
     the empty string.

  Character classes
     An expression `[...]' where the first  character  after  the
     leading `[' 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 `!'.)

     There is one special convention:  two  characters  separated
     by  `-'  denote a range.  (Thus, `[A-Fa-f0-9]' is equivalent
     to `[ABCDEFabcdef0123456789]'.)  One may include `-' in  its
     literal  meaning  by  making  it the first or last character
     between the brackets.  (Thus, `[]-]' matches  just  the  two
     characters  `]' and `-', and `[--/]' matches the three char-
     acters `-', `.', `/'.)

     An expression `[!...]' matches a  single  character,  namely
     any character that is not matched by the expression obtained
     by removing the first `!' from it.  (Thus, `[!]a-]'  matches
     any single character except `]', `a' and `-'.)

     One can remove the special meaning of `?', `*'  and  `['  by
     preceding 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 `\'.


     Globbing is applied on each of the components of a  pathname
     separately.  A  `/' in a pathname cannot be matched by a `?'
     or `*' wildcard, or by a range like `[.-0]'. A range  cannot
     contain an explicit `/' character; this would lead to a syn-
     tax error.

     If a filename starts with a  `.',  this  character  must  be
     matched explicitly.  (Thus, `rm *' will not remove .profile,
     and `tar c *' will not archive all your files; `tar c .'  is


     The nice and simple rule given  above:  `expand  a  wildcard
     pattern  into the list of matching pathnames' was the origi-
     nal Unix definition. It allowed one to  have  patterns  that
     expand into an empty list, as in
          xv -wait 0 *.gif *.jpg
     where perhaps no *.gif files are present (and this is not an
     error).   However, POSIX requires that a wildcard pattern is
     left unchanged when it is syntactically  incorrect,  or  the
     list  of  matching  pathnames  is  empty.  With bash on