13.2 Filename Globbing
Before the shell passes arguments to an external command or
interprets a built-in command, it scans the command line for certain
special characters and performs an operation known as
filename globbing. Filename globbing resembles the
processing of wildcards used in MS-DOS commands, but
it's much more sophisticated. Table 13-1 describes the special characters, known as
filename metacharacters, used in
filename globbing.
Table 13-1. Filename metacharacters
*
|
Matches a string of zero or more characters
|
?
|
Matches exactly one character
|
[abc...]
|
Matches any of the characters specified
|
[a-z]
|
Matches any character in the specified range
|
[!abc...]
|
Matches any character other than those specified
|
[!a-z]
|
Matches any character not in the specified range
|
~
|
The home directory of the current user
|
~userid
|
The home directory of the specified user
|
~+
|
The current working directory
|
~-
|
The previous working directory
|
In filename globbing, just as in MS-DOS wildcarding, the shell
attempts to replace metacharacters appearing in arguments in such a
way that arguments specify filenames. Filename globbing makes it
easier to specify names of files and sets of files.
For example, suppose the current working directory contains the files
file1, file2,
file3, and file04. Suppose
you want to know the size of each file. The following command reports
that information:
ls -l file1 file2 file3 file04
However, the following command reports the same information and is
much easier to type:
ls -l file*
As Table 13-1 shows, the *
filename metacharacter can match any string of characters. Suppose
you issued the following command:
ls -l file?
The ? filename metacharacter can match only a
single character. Therefore, file04 would not
appear in the output of the command.
Similarly, the command:
ls -l file[2-3]
would report only file2 and
file3, because only these files have names that
match the specified pattern, which requires that the last character
of the filename be in the range 2-3.
You can use more than one metacharacter in a single argument. For
example, consider the following command:
ls -l file??
This command will list file04, because each
metacharacter matches exactly one filename character.
Most commands let you specify multiple arguments. If no files match a
given argument, the command ignores the argument.
Here's another command that reports all four files:
ls -l file0* file[1-3]
|
Suppose that a command has one or more arguments that include one or
more metacharacters. If none of the arguments matches any filenames,
the shell passes the arguments to the program with the metacharacters
intact. When the program expects a valid filename, an unexpected
error may result.
|
|
The tilde (~) metacharacter lets you easily refer to
your home directory. For example, the following command:
ls ~
would list the files in your home directory.
Filename metacharacters don't merely save you
typing. They let you write scripts that selectively process files by
name. You'll see how that works later in this
chapter.
|