Falls mit jemand anderen Shells als bash, ksh93und zshhaben eine Gleitkomma - $SECONDSVariable , wenn Sie ein tun , typeset -F SECONDSwas sehr praktisch sein kann , Zeit mit Genauigkeit zu messen:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Seit Version 4.3.13 (2011) zshgibt es $EPOCHREALTIMEim zsh/datetimeModul eine spezielle Gleitkommavariable :
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Beachten Sie, dass dies von den zwei Ganzzahlen (für Sekunden und Nanosekunden) abgeleitet ist, die von zurückgegeben werden clock_gettime(). Auf den meisten Systemen ist dies präziser als eine einzelne C- doubleGleitkommazahl, sodass Sie an Genauigkeit verlieren, wenn Sie sie in arithmetischen Ausdrücken verwenden (mit Ausnahme von Datumsangaben in den ersten Monaten des Jahres 1970).
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Um Zeitunterschiede mit hoher Genauigkeit zu berechnen (obwohl ich bezweifle, dass Sie eine Genauigkeit von mehr als Millisekunden benötigen würden), möchten Sie möglicherweise $epochtimestattdessen das spezielle Array verwenden (das die Sekunden und Nanosekunden als zwei separate Elemente enthält).
Seit Version 5.7 (2018) unterstützt die strftimeeingebaute Shell auch ein %NNanosekundenformat à la GNU dateund ein %., um die Genauigkeit anzugeben, sodass die Anzahl der Millisekunden seit der Epoche auch abgerufen werden kann mit:
zmodload zsh/datetime
strftime %s%3. $epochtime
(oder in einer Variablen gespeichert mit -s var)