Beim Schreiben von Code habe ich festgestellt, dass diese Zeile:
$ TZ="America/Los_Angeles" date; echo "$TZ"
Thu Dec 24 14:39:15 PST 2015
Gibt korrekt die tatsächliche Zeit in "Los Angeles" an und dass der Wert der Variablen TZ
nicht beibehalten wird. Alles wie erwartet.
Mit dieser Zeile, mit der ich bisher einige Formate erweitert habe und die im Wesentlichen dasselbe ausführt, bleibt jedoch der Wert von TZ erhalten:
TZ="America/Los_Angeles" eval date; echo "$TZ"
Thu Dec 24 14:41:34 PST 2015
America/Los_Angeles
Nach mehreren weiteren Tests stellte ich fest, dass dies nur in einigen Schalen geschieht. Es passiert in dash, ksh aber nicht in bash oder zsh.
Q's
Die Frage (n) sind:
- Warum bleibt der Wert von TZ in der vorliegenden Hülle erhalten?
- Wie könnte dies vermieden / kontrolliert werden (wenn möglich)?
Zusätzlich.
Ich habe Tests in mehreren Schalen mit diesen beiden Zeilen durchgeführt:
myTZ="America/Los_Angeles"
unset TZ; { TZ="$myTZ" date; } >/dev/null; echo -n " direct $TZ"
unset TZ; { TZ="$myTZ" eval date; } >/dev/null; echo " evaled $TZ"
Und das Ergebnis:
/bin/ash : direct evaled America/Los_Angeles
/bin/dash : direct evaled America/Los_Angeles
/bin/sh : direct evaled America/Los_Angeles
/bin/bash : direct evaled
/bin/ksh93 : direct evaled America/Los_Angeles
/bin/lksh : direct evaled America/Los_Angeles
/bin/mksh : direct evaled America/Los_Angeles
/bin/zsh : direct evaled
/bin/zsh4 : direct evaled
Der TZ-Wert wirkt sich auf die laufende Shell in allen Shells außer Bash und Zsh aus.