Bash

Aus Info-Theke
Version vom 14. März 2021, 09:08 Uhr von Hamatoma (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „=Entfernen eines Präfixes= * Syntax: ${name#muster} oder ${name##muster} * Wird am Anfang des Variablenwertes das Muster erkannt, wird dieses abgeschnitten. *…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Entfernen eines Präfixes

  • Syntax: ${name#muster} oder ${name##muster}
  • Wird am Anfang des Variablenwertes das Muster erkannt, wird dieses abgeschnitten.
  • Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
  • Die erste Variante findet das kürzestmögliche Muster, die 2.te das längstmögliche.
 X=Datei.01.txt ; echo "#:" ${X#*.} "##:" ${X##*.}
#: 01.txt ##: txt

Entfernen eines Suffixes

  • Syntax: ${name%muster} oder ${name%%muster}
  • Wird am Ende des Variablenwertes das Muster erkannt, wird dieses abgeschnitten.
  • Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
  • Die erste Variante findet das kürzestmögliche Muster, die 2.te das längstmögliche.
 X=Datei.01.txt ; echo "%:" ${X%.*} "%%:" ${X%%.*}
%: Datei.01 %%: Datei

Ersetzen eines Teilstrings

  • Syntax: ${name/muster/ersetzung}
  • Wird das Muster im Variablenwert gefunden, wird es einmal ersetzt.
    • Sollen alle Teilstrings ersetzt werden gilt die Syntax:
    • ${name//muster/ersetzung}
  • Die Syntax des Musters ist wie bei der Dateinamensexpansion: *, ? und [] sind Metazeichen.
  • '\' ist ESC-Zeichen: das folgende Zeichen wird nicht als Metazeichen interpretiert
 X=Datei.01.txt ; echo ${X/Datei./artikel_}
 UNIX_PATH=/abc/def ; WIN_PATH=${UNIX_PATH//\//\\} ; echo $WIN_PATH
artikel_01.txt
\abc\def

Suchen eines regulären Ausdrucks

  • Syntax: expr $name : <regex>
  • expr liefert als Ergebnis 0, wenn der Ausdruck gefunden wurde, 1 wenn nicht.
  • Hinweis: der reg. Ausdruck bezieht sich immer auf den Stringanfang, enthält also implizit einen "^".
  • folgende Syntaxelemente habe ich gefunden:
    • beliebig oft: "a*"
    • maximal einmal: "a\?"
    • mindestens einmal: "a\+"
    • Anzahl Vorkommen "a\{1,5\}"
    • Klammerung "\(T:)\?[0-9-]*"
    • Alternativen: "affe\|gnu"
  • Hinweis: expr gibt zusätzlich die Länge des gefundenen Ausdrucks aus, also nach /dev/null umleiten, wenn nicht gewünscht
$X="ab2"
if expr $X : "[a-z][a-z0-9]* > /dev/null ; then
  echo "X ist ein Identifier"
fi

Datei zeilenweise abarbeiten

function Example(){
        local lines
        local file=/tmp/dummy
        mapfile -t <$file lines
        local count=${#lines[@]}
        local ix=0
        while [ $ix -lt $count ]; do
                local line=${lines[$ix]}
                ix=$(expr $ix + 1)
        done
}