% typeset -i i
% for i in a b; print $i
0
0
Variablen in zsh
können verschiedene Typen zugewiesen werden, oben -i
für "intern als Ganzzahl darstellen", wodurch die Variable als solche dargestellt wird. Dies kann auch über erfolgen integer i
. Es gibt verschiedene Möglichkeiten, um zu überprüfen, was eine Variable ist:
% print ${(t)i}
integer
% typeset -p i
typeset -i i=0
Und die übliche Shell +
zu deaktivieren (siehe auch set -x
, set +x
) es:
% typeset +i i
% for i in a b; print $i
a
b
Es kann nützlich sein, herauszufinden, was den Typ dieser Variablen geändert hat, und diese Änderung auf einen lokalen Bereich (innerhalb einer Funktion) zu beschränken, damit der globale Namespace nicht mit zufälligen Typen verschmutzt wird, insbesondere bei häufig verwendeten wegwerfbaren Variablennamen wie z i
. Es ist ziemlich einfach, den globalen Namespace zu verschmutzen, da lediglich eine Zuweisung zu einer nicht deklarierten Variablen erforderlich ist:
% () { local l=42; g=43 }
% print $l
% print $g
43
Oder jemand könnte das -g
Flag unnötig zu einem hinzufügen typeset
, wodurch die Variable global wird:
% () { typeset -g -i h=42 }
% for h in a b; print $h
0
0
Exportierte Variablen bleiben möglicherweise in neuen Prozessen erhalten (ein untergeordnetes Nicht-Subshell-Via fork
oder ein Ersatz-Via exec
), jedoch nicht der Typ:
% export -i h=42
% print $h ${(t)h}
42 integer-export
% ( print ${(t)h} )
integer-export
% exec zsh -l
% print $h ${(t)h}
42 scalar-export
i
zuvor im ersten Fall als Ganzzahl gesetzt (oder deklariert)?