Je pense que vous pourriez être confus sur un certain nombre de fronts. Le paramètre ALL_EXPORT (-a)
est défini sur setopt
, et non sur local
. Pour marquer une variable pour l'exportation avec local
, vous utilisez local -x
.
Et vous aussi confus directions de propagation :-)
Définition d'une variable locale empêchera sa durée de vie au-delà de l'extension de la fonction en cours (en fonction vers l'extérieur ou vers le haut sur la façon dont votre esprit pense).
Ceci n'affecte pas la propagation de la variable aux sous-processus exécutés dans la fonction (vers l'intérieur ou vers le bas).
Par exemple, tenez compte des scripts suivants 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
et qq2.zsh
:
echo subshell locvar1 is $LOCVAR1
echo subshell locvar2 is $LOCVAR2
Lorsque vous exécutez zsh qq.zsh
, la sortie est:
subshell locvar1 is
subshell locvar2 is 456
locvar1 is
locvar2 is
globvar is 789
afin que vous puissiez voir qu'aucune variable locale survit au retour de la fonction. Cependant, l'exportation automatique des variables locales vers un sous-processus appelé xyz
est différente. Celui marqué pour l'exportation avec local -x
est disponible dans la sous-coque, l'autre ne l'est pas.
Nous vous remercions de votre réponse. J'ai testé ce code. fonction foo { bar -a locale \t bar = 42 \t zsh -c "bar echo est $ bar" } foo .it retourne > bar est 42 . Donc, dans les sous-processus, la variable 'bar' agit comme une variable globale exportée normale? –
@Zifei, voir ma mise à jour, c'est 'local -x' pour l'exportation,' setopt -a' pour 'ALLEXPORT' (vous ne voulez probablement pas cela, il est préférable de garder les espaces de noms aussi propres que possible). – paxdiablo
Quelle erreur je viens de faire. Merci, paxdiablo. –