Enquanto escrevia algum código, descobri que esta linha:
$ TZ="America/Los_Angeles" date; echo "$TZ"
Thu Dec 24 14:39:15 PST 2015
Fornece corretamente o tempo real em "Los Angeles" e que o valor da variável TZ
não é retido. Tudo como deveria ser esperado.
No entanto, com esta linha, que eu costumava expandir alguns formatos até a data, e que basicamente executa a mesma coisa, mantém o valor de TZ:
TZ="America/Los_Angeles" eval date; echo "$TZ"
Thu Dec 24 14:41:34 PST 2015
America/Los_Angeles
Após vários testes, descobri que isso acontece apenas em algumas conchas. Isso acontece no dash, ksh, mas não no bash ou zsh.
Q's
As perguntas são:
- Por que o valor de TZ está sendo retido no shell atual?
- Como isso poderia ser evitado / controlado (se possível)?
Adicional.
Eu executei testes em várias conchas com estas duas linhas:
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"
E isso resulta:
/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
O valor TZ afeta o shell em execução em todos os shells, exceto bash e zsh.