Funktionen in der Korn-Shell
Das reservierte Wort function definiert Shellfunktionen. Die Shell liest und speichert Funktionen intern. Aliasnamen werden beim Lesen der Funktion aufgelöst. Funktionen werden von der Shell auf dieselbe Weise ausgeführt wie Befehle, wobei die Argumente als positionsgebundene Parameter übergeben werden.
Die Korn- bzw. POSIX-Shell führt Funktionen in der Umgebung aus, in der die Funktionen aufgerufen wurden. Die folgenden Angaben werden von der Funktion und dem aufrufenden Script gemeinsam benutzt, was zu gewissen Nebenwirkungen führen kann:
- Variablenwerte und Attribute (sofern Sie den Befehl typeset nicht in der Funktion verwenden, um eine lokale Variable zu deklarieren)
- Arbeitsverzeichnis
- Aliasnamen, Funktionsdefinitionen und Attribute
- Sonderparameter
$ - Geöffnete Dateien
Folgende Angaben werden von der Funktion und dem aufrufenden Prozess nicht gemeinsam benutzt, wodurch keine Nebenwirkungen erzeugt werden:
- positionsgebundene Parameter,
- Sonderparameter
# - Variablen in einer Variablenzuordnungsliste beim Aufruf der Funktion,
- in der Funktion mit dem Befehl typeset deklarierte Variablen,
- Optionen
- Traps. Signale, die vom aufrufenden Script ignoriert werden, werden jedoch auch von der Funktion ignoriert.
Wenn der Trap unter 0 oder EXIT ausgeführt wird inside der Hauptteil einer Funktion, dann wird die Aktion ausgeführt, nachdem die Funktion beendet wurde, in der Umgebung, die die Funktion aufgerufen hat. Wird der Trap außerhalb des Hauptteils einer Funktion ausgeführt, wird die Aktion beim Verlassen der Korn-Shell ausgeführt. In früheren Versionen der Korn-Shell wurde kein Trap für 0 oder EXIT außerhalb des Hauptteils einer Funktion beim Verlassen der Funktion ausgeführt.
Wenn eine Funktion ausgeführt wird, hat sie dieselben Eigenschaften für Syntaxfehler und Variablenzuordnung, die auch für die integrierten Korn- bzw. POSIX-Shellbefehle beschrieben werden.
Der zusammengesetzte Befehl wird
ausgeführt, wenn als Funktionsname der Name eines einfachen Befehls
angegeben wird. Die Operanden des Befehls werden während der
Ausführung des zusammengesetzten Befehls vorübergehend zu
positionsgebundenen Parametern. Der Sonderparameter # wird ebenfalls geändert
und zeigt die Anzahl der Operanden an. Der Sonderparameter 0 wird
nicht geändert.
Der Sonderbefehl return wird verwendet, um von Funktionsaufrufen zurückzukehren. Bei Fehlern innerhalb von Funktionen wird die Steuerung an das aufrufende Programm zurückgegeben.
Funktionsangaben können mit der Option -f oder +f des Sonderbefehls typeset aufgelistet werden. Außerdem listet die Option -f den Text von Funktionen auf. Die Definition von Funktionen wird mit der Option -f des Sonderbefehls unset aufgehoben.
Normalerweise werden Funktionen inaktiviert, wenn die Shell ein Shell-Script ausführt. Mit der Option -xf des Sonderbefehls typeset kann eine Funktion in Scripts exportiert werden, die ohne einen separaten Aufruf der Shell ausgeführt werden. Funktionen, die über einen separaten Aufruf der Shell definiert werden müssen, sollten in der Datei ENV mit der Option -xf des Sonderbefehls typeset angegeben werden.
Der Exit-Status einer Funktionsdefinition ist gleich null, wenn die Funktion nicht erfolgreich deklariert wurde. Andernfalls ist der Exit-Status größer als null. Der Exit-Status eines Funktionsaufrufs entspricht dem Exit-Status des zuletzt von der Funktion ausgeführten Befehls.