Durumda herkes diğer kabukları daha kullanıyor bash, ksh93ve zshbir kayan noktalı var $SECONDSbir yaparsanız değişken typeset -F SECONDSdoğrulukla süreyi ölçmek için kullanışlı olabilen:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Yana sürüm 4.3.13 (2011) zshbir sahiptir $EPOCHREALTIMEnokta değişkeni yüzen special zsh/datetimemodülü:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Bunun döndürdüğü iki tamsayıdan (saniye ve nanosaniye için) elde edildiğine dikkat edin clock_gettime(). Çoğu sistemde, tek bir C doublekayan nokta sayısının tutabileceğinden daha fazla hassasiyet gösterir , bu nedenle aritmetik ifadelerde kullandığınızda (1970'in ilk birkaç ayındaki tarihler hariç) hassasiyeti kaybedersiniz.
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Yüksek hassasiyetli zaman farklarını hesaplamak için (milisaniye hassasiyetinden daha fazlasına ihtiyaç duyacağınızdan şüpheliyim), $epochtimebunun yerine özel diziyi (saniyeler ve nanosaniyeleri iki ayrı eleman olarak içeren) kullanmak isteyebilirsiniz .
5.7 (2018) sürümünden bu yana, strftimekabuk yerleşimi ayrıca bir %NGNU dateve a GNU formatını ve a %.hassasiyetini belirlemek için de destekler , böylece çağdan beri milisaniye sayısı da alınabilir:
zmodload zsh/datetime
strftime %s%3. $epochtime
(veya bir değişkende saklanır -s var)