У випадку, якщо хтось використовує інші оболонки, ніж 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
)