Nel caso qualcuno sta usando altre shell oltre bash
, ksh93
e zsh
hanno una virgola mobile $SECONDS
variabile se si fa una typeset -F SECONDS
che può essere utile per misurare il tempo con una precisione:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Dalla versione 4.3.13 (2011) zsh
ha una $EPOCHREALTIME
speciale variabile in virgola mobile nel zsh/datetime
modulo:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Nota che è derivato dai due numeri interi (per secondi e nanosecondi) restituiti da clock_gettime()
. Sulla maggior parte dei sistemi, questa è una precisione maggiore di quella che double
può contenere un singolo numero in virgola mobile C , quindi perderai la precisione quando la usi in espressioni aritmetiche (tranne che per le date nei primi mesi del 1970).
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Per calcolare le differenze di tempo ad alta precisione (anche se dubito che avresti bisogno di una precisione superiore ai millisecondi), potresti invece utilizzare l' $epochtime
array speciale (che contiene i secondi e i nanosecondi come due elementi separati).
Dalla versione 5.7 (2018) la strftime
shell incorporata supporta anche un %N
formato di nanosecondi à la GNU date
e un %.
per specificare la precisione, quindi il numero di millisecondi dall'epoca può essere recuperato anche con:
zmodload zsh/datetime
strftime %s%3. $epochtime
(o memorizzato in una variabile con -s var
)