Durumda herkes diğer kabukları daha kullanıyor bash
, ksh93
ve zsh
bir kayan noktalı var $SECONDS
bir yaparsanız değişken typeset -F SECONDS
doğ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) zsh
bir sahiptir $EPOCHREALTIME
nokta değişkeni yüzen special zsh/datetime
modü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 double
kayan 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), $epochtime
bunun yerine özel diziyi (saniyeler ve nanosaniyeleri iki ayrı eleman olarak içeren) kullanmak isteyebilirsiniz .
5.7 (2018) sürümünden bu yana, strftime
kabuk yerleşimi ayrıca bir %N
GNU date
ve 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
)