Ich lese diesen Beitrag über die Verwendung von Funktionen in Bash-Shell-Variablen. Ich beobachte, dass man Shell-Funktionen exportieren und wie folgt in einer untergeordneten Shell ausführen muss, um Shell-Funktionen zu verwenden:
$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function
Ich möchte fragen, ob es möglich ist, Funktionen in Bash-Shell-Variablen so zu definieren, dass sie in der aktuellen Shell ausgeführt werden können, ohne export &running new shell ?
Akzeptierte Antwort:
Nein, das kannst du nicht.
Wenn Sie eine Funktion in der aktuellen Shell verwenden möchten, definieren Sie sie einfach und verwenden Sie sie später:
$ foo() { echo "Inside function"; }
$ foo
Inside function
Vor dem Shellshock-Tag konnten Sie Funktionen in einer Variablen speichern, Variablen exportieren und Funktionen in Sub-Shell verwenden, da bash
Exportfunktion unterstützen, bash
wird die Funktionsdefinition in Umgebungsvariable setzen wie:
foo=() {
echo "Inside function"
}
interpretieren Sie dann die Funktion, indem Sie =
ersetzen mit Platz. Es ist nicht beabsichtigt, die Funktion in eine Variable zu setzen und auf die Variable zu verweisen, um die Funktion auszuführen.
Jetzt, nachdem Stéphane Chazelas den Fehler gefunden hat, wurde dieses Feature entfernt, keine Funktionsdefinition mehr in einer einfachen Umgebungsvariable gespeichert. Jetzt werden exportierte Funktionen durch Anhängen des Präfixes BASH_FUNC_
codiert und Suffix %%
um Konflikte mit Umgebungsvariablen zu vermeiden. bash
Der Interpreter kann jetzt unabhängig vom Inhalt der Variablen feststellen, ob es sich um eine Shell-Funktion handelt oder nicht. Sie müssen die Funktion auch definieren und explizit exportieren, um sie in der Sub-Shell zu verwenden:
$ foo() { echo "Inside function"; }
$ export -f foo
$ bash -c foo
Inside function
Wie auch immer, wenn Ihr Beispiel mit Ihrer aktuellen bash
funktioniert hat , verwenden Sie eine anfällige Version.