Mientras escribía un código descubrí que esta línea:
$ TZ="America/Los_Angeles" date; echo "$TZ"
Thu Dec 24 14:39:15 PST 2015
Indica correctamente el tiempo real en "Los Ángeles" y que el valor de la variable TZ
no se retiene. Todo como debería esperarse.
Sin embargo, con esta línea, que solía expandir algunos formatos hasta la fecha, y que esencialmente ejecuta lo mismo, conserva el valor de TZ:
TZ="America/Los_Angeles" eval date; echo "$TZ"
Thu Dec 24 14:41:34 PST 2015
America/Los_Angeles
Después de varias pruebas más, descubrí que esto sucede solo en algunos proyectiles. Sucede en guión, ksh pero no en bash o zsh.
Q's
Las preguntas son:
- ¿Por qué se retiene el valor de TZ en el shell actual?
- ¿Cómo podría evitarse / controlarse (si es posible)?
Adicional.
Realicé pruebas en varios depósitos con estas dos líneas:
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"
Y esto 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
El valor TZ afecta al shell en ejecución en todos los shells excepto bash y zsh.