Expression
Metazeichen
Auch Wildcards genannt sind:
* ? ^ [ ! [ \
Metazeichen werden von der Shell expandiert und das Resultat wird als Parameter an das aufgerufene Programm übergeben.Wichtig: Die Dateinamen-Expansion erfolgt vor dem Aufruf des Programmes!
Dateinamen-Expansion
Sie werden von der Shell und auch von verschiedenen Programmen interpretiert. I.d.R. werden sie fast gleich behandelt.
- * eine beliebige Zeichenkette
ls -l *.txt Die Shell erzeugt eine Liste aller Dateinamen im
Verzeichnis, die mit .txt enden Diese Liste wird als
Parameterliste an da Kommando ls �bergeben
- ? steht für ein beliebiges Einzelzeichen
ls tag_?.txt nach tag_ darf nur ein einzelnes Zeichen vor dem
nachfolgenden . stehen. Nur diese Dateinamen werden aufgelistet
\ Das nachfolgende Metazeichen soll als normales Zeichen behandelt werden (hier der \ )
Pattern
Pattern werden mit dem speziellen Zeichen * ? [ ] - ! und normalen Zeichen gebildet.
Das/die Patternzeichen können irgendwo im Wort erscheinen. Sie können auch
mehrfach in einem Wort auftreten.
ksh Pattern sind teilweise unterschiedlich zu regular expression wie sie in z.B ed,
grep erscheinen.
Pattern werden verwendet:
- in Pfadnamen
- case pattern
- pattern matching in Vergleichen [[ ]]
- in Substrings
Pattern
[ ... ] kennzeichnet die Zeichen, die an der Stelle des Pattern stehen können
echo kap[123]
-> kap1 kap2 kap3
Besondere Bedeutung haben dabei die Zeichen - !
- (Minus) kennzeichnet einen Bereich [a-z] ,
wenn es in der Mitte steht.
bei [- oder [!- oder -] steht es
für das Minuszeichen.
! als erstes Zeichen nach [ negiert die Zeichen,
d.h alle Zeichen ausser den angeführten werden ausgewählt.
[!a-d] alle ausser a-d
] steht für ] wenn es unmittelbar folgt auf
[[...] oder [![....]
\ hiermit kann die besondere Bedeutung von
- ] ! und \ aufgehoben werden
? steht für ein beliebiges Einzelzeichen
* steht für eine beliebige Zeichenkette oder Nullkette
echo c*[1-9]
c1 c2 c3
Die folgenden Pattern funktionieren nicht in der bash
?(pattern [|pattern] ... )
Die angeführten pattern dürfen Null oder Einmal vorkommen
echo ?(c*[0-9]| c*bak)
c1 c2 c3 calendar.bak compile.bak
*(pattern [|pattern] ... )
Die angeführten pattern dürfen 0 bis n Mal vorkommen
+(pattern [|pattern] ... )
Die angeführten pattern dürfen 1 bis n Mal vorkommen
@(pattern [|pattern] ... )
Die angeführten pattern dürfen nur exakt 1 Mal vorkommen