En caso de que alguien esté usando otros shells que no sean bash
, ksh93
y zsh
tenga una $SECONDS
variable de coma flotante si hace algo typeset -F SECONDS
que puede ser útil para medir el tiempo con precisión:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Desde la versión 4.3.13 (2011) zsh
tiene una $EPOCHREALTIME
variable especial de coma flotante en el zsh/datetime
módulo:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Tenga en cuenta que eso se deriva de los dos enteros (por segundos y nanosegundos) devueltos por clock_gettime()
. En la mayoría de los sistemas, eso es más precisión de la que double
puede contener un solo número de coma flotante en C , por lo que perderá precisión cuando lo use en expresiones aritméticas (excepto las fechas en los primeros meses de 1970).
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Para calcular las diferencias de tiempo de alta precisión (aunque dudo que necesite más que una precisión de milisegundos), es posible que desee utilizar la $epochtime
matriz especial en su lugar (que contiene los segundos y nanosegundos como dos elementos separados).
Desde la versión 5.7 (2018), el strftime
shell incorporado también admite un %N
formato de nanosegundos a la GNU date
y a %.
para especificar la precisión, por lo que el número de milisegundos desde la época también se puede recuperar con:
zmodload zsh/datetime
strftime %s%3. $epochtime
(o almacenado en una variable con -s var
)