Dans le cas où quelqu'un utilise d'autres coquilles que bash, ksh93et zsha une variable à virgule flottante $SECONDSsi vous en faites une typeset -F SECONDSqui 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) zsha une $EPOCHREALTIMEvariable spéciale à virgule flottante dans le zsh/datetimemodule:
$ 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 doublenombre à 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 strftimeshell intégré prend également en charge un %Nformat nanoseconde à la GNU dateet 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)