У випадку, якщо хтось використовує інші оболонки, ніж bash, ksh93і zshмає $SECONDSзмінну з плаваючою точкою, якщо ви це зробите, typeset -F SECONDSяка може бути зручною для точності вимірювання часу:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Оскільки версія 4.3.13 (2011) у модулі zshмає $EPOCHREALTIMEспеціальну змінну з плаваючою точкою zsh/datetime:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Зауважте, що це походить від двох цілих чисел (за секунди та наносекунди), повернені о clock_gettime(). У більшості систем ця точність є більшою, ніж doubleможе посісти одне число з плаваючою точкою С , тому ви втратите точність, використовуючи її в арифметичних виразах (за винятком дат у перші кілька місяців 1970 року).
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Для обчислення високої різниці в часі (хоча, я сумніваюся, вам знадобиться більше, ніж мілісекундна точність), ви можете $epochtimeзамість цього використати спеціальний масив (який містить секунди та наносекунди як два окремих елемента).
Оскільки версія 5.7 (2018) strftimeвбудована оболонка також підтримує %Nнаносекундний формат à la GNU dateта a, %.щоб вказати точність, тому кількість мілісекунд після епохи також можна отримати за допомогою:
zmodload zsh/datetime
strftime %s%3. $epochtime
(або зберігається у змінній з -s var)