Seandainya ada orang yang menggunakan cangkang selain bash
, ksh93
dan zsh
memiliki $SECONDS
variabel floating point jika Anda melakukan typeset -F SECONDS
yang dapat berguna untuk mengukur waktu dengan akurat:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
Sejak versi 4.3.13 (2011) zsh
memiliki $EPOCHREALTIME
variabel floating point khusus dalam zsh/datetime
modul:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
Perhatikan bahwa itu berasal dari dua bilangan bulat (untuk detik dan nanodetik) yang dikembalikan oleh clock_gettime()
. Pada kebanyakan sistem, itu lebih presisi daripada yang double
bisa dimiliki oleh angka C floating point tunggal , sehingga Anda akan kehilangan presisi ketika Anda menggunakannya dalam ekspresi aritmatika (kecuali untuk tanggal dalam beberapa bulan pertama tahun 1970).
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
Untuk menghitung perbedaan waktu presisi tinggi (meskipun saya ragu Anda akan membutuhkan lebih dari presisi milidetik), Anda mungkin ingin menggunakan $epochtime
array khusus sebagai gantinya (yang berisi detik dan nanodetik sebagai dua elemen terpisah).
Sejak versi 5.7 (2018) strftime
shell builtin juga mendukung %N
format nanodetik à la GNU date
dan a %.
untuk menentukan presisi, sehingga jumlah milidetik sejak zaman juga dapat diambil dengan:
zmodload zsh/datetime
strftime %s%3. $epochtime
(atau disimpan dalam variabel dengan -s var
)