いくつかのコードを書いているとき、私はこの行を見つけました:
$ TZ="America/Los_Angeles" date; echo "$TZ"
Thu Dec 24 14:39:15 PST 2015
「ロサンゼルス」での実際の時間を正しく示し、変数の値がTZ
保持されないこと。期待どおりすべて。
ただし、この行では、一部の形式を日付に展開し、基本的に同じことを実行するため、TZの値が保持されます。
TZ="America/Los_Angeles" eval date; echo "$TZ"
Thu Dec 24 14:41:34 PST 2015
America/Los_Angeles
さらにいくつかのテストを行った結果、これが一部のシェルでのみ発生することがわかりました。ダッシュ、kshでは発生しますが、bashやzshでは発生しません。
Q
質問は次のとおりです。
- TZの値が現在のシェルで保持されているのはなぜですか?
- それをどのように回避/制御できますか(可能な場合)?
追加。
次の2行を使用して、いくつかのシェルでテストを実行しました。
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"
そして、この結果:
/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
TZ値は、bashとzshを除くすべてのシェルで実行中のシェルに影響します。