Nel caso qualcuno sta usando altre shell oltre bash, ksh93e zshhanno una virgola mobile $SECONDSvariabile se si fa una typeset -F SECONDSche 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) zshha una $EPOCHREALTIMEspeciale variabile in virgola mobile nel zsh/datetimemodulo:
$ 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 doublepuò 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' $epochtimearray speciale (che contiene i secondi e i nanosecondi come due elementi separati).
Dalla versione 5.7 (2018) la strftimeshell incorporata supporta anche un %Nformato di nanosecondi à la GNU datee 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)