19.2. Globbing
Bash itself cannot recognize Regular Expressions. Inside
scripts, it is commands and utilities -- such as
sed and awk -- that interpret RE's.
Bash does carry out filename
expansion
-- a process known as globbing -- but
this does not use the standard RE set.
Instead, globbing recognizes and expands wildcards. Globbing
interprets the standard wildcard characters, *
and ?, character lists in square brackets, and
certain other special characters (such as ^ for
negating the sense of a match). There are important limitations
on wildcard characters in globbing, however. Strings containing
* will not match filenames that
start with a dot, as, for example, .bashrc.
Likewise, the ? has a different
meaning in globbing than as part of an RE.
bash$ ls -l
total 2
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1
-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh
-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt
bash$ ls -l t?.sh
-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh
bash$ ls -l [ab]*
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1
bash$ ls -l [a-c]*
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1
bash$ ls -l [^ab]*
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1
-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh
-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt
bash$ ls -l {b*,c*,*est*}
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1
-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1
-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt
|
Bash performs filename expansion on unquoted command-line
arguments. The echo command
demonstrates this.
bash$ echo *
a.1 b.1 c.1 t2.sh test1.txt
bash$ echo t*
t2.sh test1.txt
|
| It is possible to modify the way Bash interprets
special characters in globbing. A set -f
command disables globbing, and the
nocaseglob and nullglob
options to shopt change
globbing behavior. |
See also Example 10-4.