Ich denke, Sie könnten an einer Reihe von Fronten verwirrt sein. Die ALL_EXPORT (-a)
Einstellung ist für setopt
, nicht local
. Um eine Variable für den Export mit local
zu kennzeichnen, verwenden Sie local -x
.
Und Sie sind auch Ausbreitungsrichtungen verwirrend :-)
eine Variable als lokale Definition über die derzeitige Funktion, der sich von seiner gesamten Lebensdauer verhindern (nach außen oder nach oben, je nachdem, wie Ihr Geist denkt).
Dies hat keinen Einfluss auf die Weitergabe der Variablen an Unterprozesse, die innerhalb der Funktion ausgeführt werden (nach innen oder nach unten).
Betrachten wir zum Beispiel die folgenden Skripte qq.zsh
:
function xyz {
local LOCVAR1
local -x LOCVAR2
LOCVAR1=123
LOCVAR2=456
GLOBVAR=789
zsh qq2.zsh
}
xyz
echo locvar1 is $LOCVAR1
echo locvar2 is $LOCVAR2
echo globvar is $GLOBVAR
und qq2.zsh
:
echo subshell locvar1 is $LOCVAR1
echo subshell locvar2 is $LOCVAR2
Wenn Sie zsh qq.zsh
laufen, der Ausgang ist:
subshell locvar1 is
subshell locvar2 is 456
locvar1 is
locvar2 is
globvar is 789
so können Sie sehen, dass keine lokale Variable die Rückkehr von überlebt die Funktion. Der automatische Export der lokalen Variablen in einen Teilprozess, der innerhalb von xyz
aufgerufen wird, ist jedoch unterschiedlich. Der für den Export mit local -x
markierte ist in der Sub-Shell verfügbar, der andere nicht.
Vielen Dank für Ihre Antwort. Ich habe diesen Code getestet. Funktion foo { lokalen -a bar \t bar = 42 \t zsh -c "echo bar ist $ bar" } foo .it liefert> bar 42 ist. Also in den Teilprozessen, Variable 'bar' fungieren als eine normale exportierte globale Variable? –
@ Zifei, sehe mein Update, es ist 'local -x' für den Export,' setopt -a' für 'ALLEXPORT' (wahrscheinlich willst du das nicht, es ist besser, Namespaces so sauber wie möglich zu halten). – paxdiablo
Was für ein Fehler habe ich gerade gemacht. Danke, Paxdiablo. –