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

>