Parameter Expansion und String Manipulation

Uppercasing

str="foo"
echo "${str^}" # Foo
echo "${str^^}" # FOO

Lowercasing

str="FOO"
echo "${str,}" # fOO
echo "${str,,}" # foo

Slicing, Substitution und andere Shenanigans

Slicing

name="Ruven"
echo "${name:0:2}" # Ru -> Slice von 0, 2 characters
echo "${name::2}" # Ru -> Shorthand für Obiges
echo "${name::-1}" # Ruve -> Slice von 0, von rechts -1 (Negative Werte (Absoluter Wert muss!! kleiner als gesamte Länge) funktioniert erst ab `bash 4.2` Schlechte Kompatibilität)
echo "${name:(-1)}" # n -> Slicing von 1 char von rechts, bis zum Ende
echo "${name:(-2):1}" # e -> Slicing von 2 chars von rechts, dann nur einer
# Die Zahlen hier können alle auch mit Variablen ersetzt werden
length=2; echo "${name:0:length}" # Ru
str="/path/to/foo.sh"
echo "${str#*/}" # path/to/foo.sh -> # entfernt das kürzeste Match vom Muster von links
echo "${str#*.}" # sh -> Wie oben, nur mehr Match :D
echo "${str##*/}" # foo.sh -> ## entfernt das längste Match vom Muster von links (Hier, basepath, kann auch mit basepath <string> gefunden werden, der Rest dementsprechend mit dirpath)
str="/path/to/foo.sh"
echo "${str%.sh}" # /path/to/foo -> % entfernt das kürzeste Match vom Muster von rechts
echo "${str%/*}" # /path/to -> Wie oben, nur mehr Match :D
echo "${str%%o*}" # /path/t -> %% entfernt das längste Match vom Muster von rechts
echo "${str%.sh}.py" # /path/to/foo.py -> Ändert also die Dateiendung

Basepath und Dirpath mit Hilfe von Variablen

str="/path/to/foo.sh"
base="${str##*/}" # Entfernt das längste Match von links, also alles inklusive das letzte / -> foo.sh
dir="${str%${base}}" # Entfernt das kürzeste "base" Match von rechts -> /path/to/

Substitution

name="RuvenRuven"
echo "${name/R/r}" # ruvenRuven -> Ersetzt das erste Match von R mit r
echo "${name//R/r}" # ruvenruven -> Ersetzt alle Matches von R mit r
echo "${name/#Ru/r}" # rvenRuven -> Ersetzt das von links erste Match von Ru mit r (Also irgendwie das selbe, wie ohne #)
echo "${name/%ven/lan}" # RuvenRulan -> Ersetzt das erste Match von rechts von ven mit lan