場合には誰でも以外のシェルを使用している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
これは、によって返される2つの整数(秒とナノ秒)から導出されることに注意してくださいclock_gettime()
。ほとんどのシステムでは、1つのC double
浮動小数点数が保持できる精度よりも高いため、算術式で使用すると精度が低下します(1970年の最初の数か月の日付を除く)。
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
高精度の時間差を計算するには(ミリ秒以上の精度が必要になるとは思いませんが)、$epochtime
代わりに特別な配列(秒とナノ秒を2つの別個の要素として含む)を使用することができます。
バージョン5.7(2018)以降、strftime
シェルのビルトインは%N
ナノ秒形式のGNU date
およびa %.
をサポートし、精度を指定するため、エポックからのミリ秒数も取得できます。
zmodload zsh/datetime
strftime %s%3. $epochtime
(またはで変数に保存-s var
)