Saat menulis beberapa kode saya menemukan bahwa baris ini:
$ TZ="America/Los_Angeles" date; echo "$TZ"
Thu Dec 24 14:39:15 PST 2015
Benar memberikan waktu aktual di "Los Angeles" dan bahwa nilai variabel TZ
tidak dipertahankan. Semua seperti yang diharapkan.
Namun, dengan baris ini, yang saya gunakan untuk memperluas beberapa format hingga saat ini, dan yang pada dasarnya mengeksekusi hal yang sama, mempertahankan nilai TZ:
TZ="America/Los_Angeles" eval date; echo "$TZ"
Thu Dec 24 14:41:34 PST 2015
America/Los_Angeles
Setelah beberapa tes lagi, saya mengetahui bahwa ini hanya terjadi pada beberapa shell. Ini terjadi di dash, ksh tetapi tidak di bash atau zsh.
Q's
Pertanyaannya adalah:
- Mengapa nilai TZ dipertahankan dalam shell ini?
- Bagaimana itu bisa dihindari / dikendalikan (jika mungkin)?
Tambahan.
Saya menjalankan beberapa tes dengan dua baris ini:
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"
Dan ini menghasilkan:
/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
Nilai TZ memengaruhi running shell di semua shell kecuali bash dan zsh.