Seandainya ada orang yang menggunakan cangkang selain bash, ksh93dan zshmemiliki $SECONDSvariabel floating point jika Anda melakukan typeset -F SECONDSyang 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) zshmemiliki $EPOCHREALTIMEvariabel floating point khusus dalam zsh/datetimemodul:
$ 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 doublebisa 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 $epochtimearray khusus sebagai gantinya (yang berisi detik dan nanodetik sebagai dua elemen terpisah).
Sejak versi 5.7 (2018) strftimeshell builtin juga mendukung %Nformat nanodetik à la GNU datedan 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)