Falls mit jemand anderen Shells als bash
, ksh93
und zsh
haben eine Gleitkomma - $SECONDS
Variable , wenn Sie ein tun , typeset -F SECONDS
was 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) zsh
gibt es $EPOCHREALTIME
im zsh/datetime
Modul 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- double
Gleitkommazahl, 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 $epochtime
stattdessen das spezielle Array verwenden (das die Sekunden und Nanosekunden als zwei separate Elemente enthält).
Seit Version 5.7 (2018) unterstützt die strftime
eingebaute Shell auch ein %N
Nanosekundenformat à la GNU date
und 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
)