In der Einführung wurden Wildcards
schon vorgestellt, allerdings ohne die Reihenfolge ihrer Auswertung zu erwähnen.
In folgender Tabelle sind daher diejenigen Jokerzeichen zusammengefasst, die im
Sinne einer Pfadnamensexpansion betrachtet werden:
? |
Genau ein beliebiges Zeichen |
* |
Beliebig viele (auch 0) beliebige Zeichen |
[def] |
Eines der Zeichen |
[^def] |
Keines der angegebenen Zeichen |
[!def] |
Wie oben |
[a-d] |
Alle Zeichen aus dem Bereich |
Beispiele
user@sonne> ls *.tex
Buch.tex buch.tex BUCH.tex
user@sonne> ls ?uch.tex
Buch.tex buch.tex
user@sonne> ls -d /*
bin cdrom etc home lost+found opt root tmp var
boot dev floppy lib mnt proc sbin usr
user@sonne> ls -d /*[a-c]*
/bin /boot /cdrom /etc /lib /proc /sbin /var
user@sonne> ls -d /*[^d-z]*
/bin /boot /cdrom /etc /lib /lost+found /proc /sbin /var
|
Erweiterter Modus
Im erweiterten Modus versteht die Bash noch eine
Fülle weiterer Suchmuster. Dazu muss die eingebaute Shelloption extglob
eingeschaltet werden:
user@sonne> shopt extglob
extglob off
user@sonne> shopt -s extglob
user@sonne> shopt extglob
extglob on
|
Muster |
Steht für... |
?(a|b|c) |
Keine oder eine der eingeschlossenen Zeichenketten |
*(a|b|c) |
Keine oder mehrere der eingeschlossenen Zeichenketten |
+(a|b|c) |
Eine oder mehrere der eingeschlossenen Zeichenketten |
@(a|b|c) |
Genau eine der eingeschlossenen Zeichenketten |
!(a|b|c) |
Alle außer den eingeschlossenen Zeichenketten |
Anstelle der Zeichenketten dürfen wiederum Muster verwendet werden:
# alle Namen, die mit "bi", "*+" oder "us" beginnen
user@sonne> ls -d /+(bi|*+|us)*
/bin /lost+found /usr
# alle Namen, die nicht mit "b*" beginnen und deren zweiter Buchstabe kein "o" ist
user@sonne> ls -d /!(b*|?o*)
/cdrom /dev /etc /floppy /lib /mnt /opt /proc /sbin /tmp /usr /var
|