En caso de que alguien esté usando otros shells que no sean bash, ksh93y zshtenga una $SECONDSvariable de coma flotante si hace algo typeset -F SECONDSque 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) zshtiene una $EPOCHREALTIMEvariable especial de coma flotante en el zsh/datetimemó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 doublepuede 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 $epochtimematriz especial en su lugar (que contiene los segundos y nanosegundos como dos elementos separados).
Desde la versión 5.7 (2018), el strftimeshell incorporado también admite un %Nformato de nanosegundos a la GNU datey 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)