Trong trường hợp bất cứ ai đang sử dụng vỏ ngoài bash
, ksh93
và zsh
có một điểm nổi $SECONDS
biến nếu bạn làm một typeset -F SECONDS
mà có thể thuận tiện để đo thời gian với độ chính xác:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Do phiên bản 4.3.13 (2011) zsh
có $EPOCHREALTIME
biến số dấu phẩy động đặc biệt trong zsh/datetime
mô-đun:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Lưu ý rằng đó là xuất phát từ hai số nguyên (tính bằng giây và nano giây) được trả về clock_gettime()
. Trên hầu hết các hệ thống, độ chính xác cao hơn double
số dấu phẩy động C có thể giữ được, do đó bạn sẽ mất độ chính xác khi bạn sử dụng nó trong các biểu thức số học (ngoại trừ ngày trong vài tháng đầu năm 1970).
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Để tính toán chênh lệch thời gian chính xác cao (mặc dù tôi nghi ngờ bạn cần nhiều hơn độ chính xác mili giây), bạn có thể muốn sử dụng $epochtime
mảng đặc biệt thay thế (chứa giây và nano giây như hai yếu tố riêng biệt).
Kể từ phiên bản 5.7 (2018) các strftime
BUILTIN vỏ cũng hỗ trợ một %N
định dạng nano giây à la GNU date
và một %.
để xác định chính xác, vì vậy số mili giây kể từ khi kỷ nguyên cũng có thể được lấy ra với:
zmodload zsh/datetime
strftime %s%3. $epochtime
(hoặc được lưu trữ trong một biến với -s var
)