# Und noch einmal Jokerzeichen...

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`