Wenn ein Skript ein anderes Skript aufruft, können Variablen des übergeordneten Skripts exportiert werden, die dann im untergeordneten Skript angezeigt werden. Das Exportieren von Funktionen ist eine offensichtliche Verallgemeinerung: Exportieren Sie die Funktion vom übergeordneten Element und machen Sie sie im untergeordneten Element sichtbar.
Die Umgebung ist die einzig bequeme Möglichkeit, wie ein Prozess beliebige Daten an seine untergeordneten Elemente weitergeben kann. Die Daten müssen in Zeichenfolgen zusammengefasst werden, die keine Null-Bytes enthalten, was für Shell-Funktionen keine Schwierigkeit darstellt. Es gibt andere mögliche Methoden, wie z. B. gemeinsam genutzte Speicherblöcke oder temporäre Dateien, die über Dateideskriptoren übergeben werden. Diese können jedoch Probleme mit Zwischenprogrammen verursachen, die nicht wissen, was sie damit tun sollen, oder sie schließen würden. Programme werden voraussichtlich in einer Umgebung ausgeführt, die Variablen enthält, die sie nicht kennen oder für die sie sich nicht interessieren, damit sie nicht überschrieben oder gelöscht werden.
Die Wahl, den Funktionsnamen als Namen der Umgebungsvariablen zu verwenden, ist seltsam. Zum einen bedeutet dies, dass eine exportierte Variable mit einer exportierten Funktion mit demselben Namen kollidiert.
Exportierte Funktionen sind eine alte Funktion. In der Bourne-Shell in SVR2 wurden Funktionen hinzugefügt und Funktionen in der Version 8-Shell exportiert, die im selben Jahr (1984) veröffentlicht wurde. In dieser Shell verwendeten Variablen und Funktionen denselben Namespace. Ich weiß nicht, wie der Funktionsexport funktioniert hat. Die Heirloom-Shell basiert auf einer Bourne-Variante, die Funktionen hat, diese aber nicht exportiert.
ATT ksh unterstützt angeblich das Exportieren von Funktionen, aber wenn ich mir die Quelle anschaue oder damit spiele, kann ich nicht sehen, dass dies ab ksh93u der Fall ist.
env -i /usr/bin/ksh -c 'f=variable; f () { echo function; }; typeset -fx f; /usr/bin/env; ksh -c f'
_=*25182*/usr/bin/env
PWD=/home/gilles
SHLVL=1
A__z="*SHLVL
ksh: f: not found
Die Public Domain-Klone (pdksh, mksh), dash und zsh von Ksh unterstützen keine Exportfunktionen.