Unterschiedliche Ergebnisse Kommandozeile / Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Ragoutc
Beiträge: 3
Registriert: 09.01.2022 13:26:18

Unterschiedliche Ergebnisse Kommandozeile / Script

Beitrag von Ragoutc » 09.01.2022 14:19:24

Hallo zusammen,

folgendes bash-Problem kann ich gerade nicht lösen. Ein Befehl, funktioniert in der Kommandozeeile, aber nicht im Script.

Wenn ich an der Kommandozeile folgende Befehle ausgebe,

Code: Alles auswählen

> var1='   aaa    bbb xxx    ccc'
> echo "${var1//+([ x])}"
... ist die Ausgabe wie erwartet:

Code: Alles auswählen

aaabbbccc
Wenn ich aber dieselben Befehle in ein Script packe:

Code: Alles auswählen

#!/bin/bash
var1='   aaa    bbb xxx    ccc'
echo "${var1//+([ x])}"
dann ist die Ausgabe:

Code: Alles auswählen

   aaa    bbb xxx    ccc
Es liegt wohl an dem Teil "+(" im echo-Befehl. Denn wenn ich das weglasse und nur

Code: Alles auswählen

echo "${var1//+[ x]}"
schreibe, dann funtioniert der Befehl in der Kommandozeile und im Script gleichermaßen.

Dass ich das Ergebnis evtl. auch auf andere Weise lösen kann (z. B. sed) weiß ich. Aber ich möchte hier gerne wissen, warum Kommandozeile und Script sich unterschiedlich verhalten.

Viele Grüße
Ragoutc
---------------------------------------
Openmediavault 6 (Debian 10.11)

Ich denke, also bin ich.
Manche sind trotzdem!

Huo
Beiträge: 778
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: Unterschiedliche Ergebnisse Kommandozeile / Script

Beitrag von Huo » 09.01.2022 15:45:33

Das Suchmuster "+(Pattern)" ist Teil des sogenannten Extended Globbing. Extended Globbing ist zwar in der interaktiven Shell aktiviert, nicht aber in einem Skript. Per Befehl shopt -s extglob lässt sich "Extended Globbing" jedoch auch im Skript einschalten:

Code: Alles auswählen

#!/bin/bash
shopt -s extglob
var1='   aaa    bbb xxx    ccc'
echo "${var1//+([ x])}"

Benutzeravatar
Ragoutc
Beiträge: 3
Registriert: 09.01.2022 13:26:18

Re: Unterschiedliche Ergebnisse Kommandozeile / Script

Beitrag von Ragoutc » 09.01.2022 18:37:07

Hallo,

Es funktioniert!!!

Ungalublich. Wer kommt denn auf sowas, das Globbing in Kommandozeile und Script unterschiedlich zu implementieren?? Mit dem möchte ich gerne mal ein Gespräch in aller Ruhe unter vier Augen führen...

Viele Grüße
---------------------------------------
Openmediavault 6 (Debian 10.11)

Ich denke, also bin ich.
Manche sind trotzdem!

Antworten