/ / Verwendung von Klammern / Klammern in Shell - Skripten oder Verwendung von Klammern in der Befehlszeile bash - linux, bash, shell

Brackets / Klammern innerhalb von Shell - Skripten verwenden vs. über die Befehlszeile bash - linux, bash, shell

Wenn ich benutze rm -r secrets/!(snapsearch) in der Befehlszeile. Es funktioniert und löscht alles im Secrets-Ordner mit Ausnahme des Snapsearch-Ordners.

Wenn ich jedoch genau denselben Befehl in einem Bash-Skript verwende und ihn ausführe, beschwert er sich über die Klammern.

syntax error near unexpected token `("

Warum funktioniert es über die Befehlszeile und nicht über das Bash-Skript? Und wie kann ich das aus dem Bash-Skript machen?

Antworten:

1 für die Antwort № 1

Sie müssen aktivieren extglob im nicht interaktiven Modus, d. h. wenn Sie Ihr Skript ausführen.

Sie haben zwei Möglichkeiten. Fügen Sie zuerst die folgende Zeile am Anfang Ihres Skripts hinzu:

shopt -s extglob

Beachten Sie, dass seit extglob ändert die Art und Weise, in der Ausdrücke analysiert werden, so dass es sich in einer eigenen Zeile befinden muss und nicht Teil eines Blocks sein kann, z. ein if Block.

Zweitens, führen Sie das Skript aus, indem Sie sagen:

bash -O extglob scriptname

(Die zweite Option würde keine Änderungen am Skript erfordern.)