Node:Wildcard Matching, Next:Globbing, Up:Pattern Matching
This section describes how to match a wildcard pattern against a
particular string. The result is a yes or no answer: does the
string fit the pattern or not. The symbols described here are all
declared in fnmatch.h
.
int fnmatch (const char *pattern, const char *string, int flags) | Function |
This function tests whether the string string matches the pattern
pattern. It returns 0 if they do match; otherwise, it
returns the nonzero value FNM_NOMATCH . The arguments
pattern and string are both strings.
The argument flags is a combination of flag bits that alter the details of matching. See below for a list of the defined flags. In the GNU C Library, |
These are the available flags for the flags argument:
FNM_FILE_NAME
/
character specially, for matching file names. If
this flag is set, wildcard constructs in pattern cannot match
/
in string. Thus, the only way to match /
is with
an explicit /
in pattern.
FNM_PATHNAME
FNM_FILE_NAME
; it comes from POSIX.2. We
don't recommend this name because we don't use the term "pathname" for
file names.
FNM_PERIOD
.
character specially if it appears at the beginning of
string. If this flag is set, wildcard constructs in pattern
cannot match .
as the first character of string.
If you set both FNM_PERIOD
and FNM_FILE_NAME
, then the
special treatment applies to .
following /
as well as to
.
at the beginning of string. (The shell uses the
FNM_PERIOD
and FNM_FILE_NAME
flags together for matching
file names.)
FNM_NOESCAPE
\
character specially in patterns. Normally,
\
quotes the following character, turning off its special meaning
(if any) so that it matches only itself. When quoting is enabled, the
pattern \?
matches only the string ?
, because the question
mark in the pattern acts like an ordinary character.
If you use FNM_NOESCAPE
, then \
is an ordinary character.
FNM_LEADING_DIR
/
in
string; that is to say, test whether string starts with a
directory name that pattern matches.
If this flag is set, either foo*
or foobar
as a pattern
would match the string foobar/frobozz
.
FNM_CASEFOLD
FNM_EXTMATCH
ksh
. The patterns are written in the form
explained in the following table where pattern-list is a |
separated list of patterns.
?(pattern-list)
*(pattern-list)
+(pattern-list)
@(pattern-list)
!(pattern-list)