Dans le cas où quelqu'un utilise d'autres coquilles que bash
, ksh93
et zsh
a une variable à virgule flottante $SECONDS
si vous en faites une typeset -F SECONDS
qui peut être pratique pour mesurer le temps avec précision:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Depuis la version 4.3.13 (2011) zsh
a une $EPOCHREALTIME
variable spéciale à virgule flottante dans le zsh/datetime
module:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Notez que cela est dérivé des deux entiers (pour les secondes et les nanosecondes) renvoyés par clock_gettime()
. Sur la plupart des systèmes, c'est plus de précision qu'un seul double
nombre à virgule flottante C peut contenir, donc vous perdrez de la précision lorsque vous l'utiliserez dans des expressions arithmétiques (sauf pour les dates des premiers mois de 1970).
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Pour calculer des différences de temps de haute précision (bien que je doute que vous ayez besoin d'une précision supérieure à la milliseconde), vous pouvez utiliser le $epochtime
tableau spécial à la place (qui contient les secondes et les nanosecondes comme deux éléments distincts).
Depuis la version 5.7 (2018), le strftime
shell intégré prend également en charge un %N
format nanoseconde à la GNU date
et a %.
pour spécifier la précision, donc le nombre de millisecondes depuis l'époque peut également être récupéré avec:
zmodload zsh/datetime
strftime %s%3. $epochtime
(ou stocké dans une variable avec -s var
)