BASH - Warum dieses Quoting?

KillerCow

Lt. Commander
🎅Rätsel-Elite ’25
Registriert
Jan. 2012
Beiträge
1.824
Ich wusel aktuell mal wieder etwas mehr mit Bash herum und versuche, das ein oder andere Detail zu verstehen.

Folgender Schnipsel als Kern eines "trim()" bereitet mir final noch ein bisschen Kopfzerbrechen, wobei es nicht um die eigentliche Funktion geht (die ist klar), sondern um das Warum zum Quoting:
Bash:
: "${1#"${1%%[![:space:]]*}"}"
: "${_%"${_##*[![:space:]]}"}"
printf '%s' "$_"

Lasse ich die "inneren" Anführungszeichen weg, funktioniert es bei meinen Tests genauso:
Bash:
: "${1#${1%%[![:space:]]*}}"
: "${_%${_##*[![:space:]]}}"
printf '%s' "$_"

Ist das irgendein Workaround für ältere Bash Versionen, übersehe ich da was anderes Wesentliches oder hatte der Author des Schnipsels einfach nur Anführungszeichen über!?
 
Lösung
Manchmal macht es einen Unterschied. Nur weils aussenrum gequotet ist gilt das nicht mehr innen z.B. bei $(befehl parameter) Geschichten.

Manchmal macht es keinen Unterschied aber man macht trotzdem "" hin, nur damit der Editor im Syntax Highlighting schöner anzeigt.

Oder weil man nicht nachdenken möchte wann es den Unterschied macht. Lieber mal zuviel gequote als zu wenige

das mit alten Bash Versionen kann dann trotzdem auch sein, gab auch schon Bugs damit

edit:

ah, shell check sagt

Code:
In test.sh line 10:
    : "${1#${1%%[![:space:]]*}}"
           ^-----------------^ SC2295 (info): Expansions inside ${..} need to be quoted separately, otherwise they match as patterns.
Manchmal macht es einen Unterschied. Nur weils aussenrum gequotet ist gilt das nicht mehr innen z.B. bei $(befehl parameter) Geschichten.

Manchmal macht es keinen Unterschied aber man macht trotzdem "" hin, nur damit der Editor im Syntax Highlighting schöner anzeigt.

Oder weil man nicht nachdenken möchte wann es den Unterschied macht. Lieber mal zuviel gequote als zu wenige

das mit alten Bash Versionen kann dann trotzdem auch sein, gab auch schon Bugs damit

edit:

ah, shell check sagt

Code:
In test.sh line 10:
    : "${1#${1%%[![:space:]]*}}"
           ^-----------------^ SC2295 (info): Expansions inside ${..} need to be quoted separately, otherwise they match as patterns.
 
  • Gefällt mir
Reaktionen: ILoveShooter132, KillerCow und Helge01
Super, danke! Wird Zeit, dass ich mir nen passenden Linter/Checker einrichte. Ohne wird das dann wohl doch nichts bei mir ;)

... und schon explodieren meine Bastelskripte mit Warnings. Wird nen interessanter Sonntag :D
 
wobei shell check sich auch mal beschwert, wo es nicht zutrifft

und manchmal möchte man ja auch in voller absicht das tun wovor shell check warnt

dennoch unerlässliches tool da man sehr schnell flüchtigkeitfehler macht beim bash scripten
 
  • Gefällt mir
Reaktionen: Marco01_809 und KillerCow
Habe hier eine Antwort mit der Ausgabe von der lokalen KI als Beispiel für eine hilfreiche Analyse gepostet. Leider wurde es ins Aquarium verschoben. ;)
 
Zurück
Oben