W przypadku, gdy ktoś używa innych niż muszle bash, ksh93i zshmają zmiennoprzecinkowe $SECONDSzmienną jeśli zrobić typeset -F SECONDS, które mogą być przydatne do pomiaru czasu z dokładnością:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Od wersji 4.3.13 (2011) w module zshznajduje się $EPOCHREALTIMEspecjalna zmienna zmiennoprzecinkowa zsh/datetime:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Zauważ, że pochodzi od dwóch liczb całkowitych (dla sekund i nanosekund) zwróconych przez clock_gettime(). W większości systemów jest to większa precyzja, niż doublemoże pomieścić pojedyncza liczba zmiennoprzecinkowa C , więc stracisz precyzję, gdy użyjesz jej w wyrażeniach arytmetycznych (z wyjątkiem dat w pierwszych miesiącach 1970 r.).
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Aby obliczyć różnice czasowe o wysokiej precyzji (wątpię, byś potrzebował więcej niż milisekundowej precyzji), możesz $epochtimezamiast tego użyć specjalnej tablicy (która zawiera sekundy i nanosekundy jako dwa osobne elementy).
Od wersji 5.7 (2018) strftimewbudowana powłoka obsługuje także %Nformat nanosekundowy à la GNU datei a, %.aby określić precyzję, więc liczbę milisekund od epoki można również odzyskać za pomocą:
zmodload zsh/datetime
strftime %s%3. $epochtime
(lub przechowywane w zmiennej z -s var )