यदि कोई अन्य गोले का उपयोग कर रहा है 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 नैनोसेकंड प्रारूप आ ला जीएनयू dateऔर एक %.सटीक निर्दिष्ट करने के लिए , इसलिए युग के बाद से मिलीसेकंड की संख्या को भी पुनः प्राप्त किया जा सकता है:
zmodload zsh/datetime
strftime %s%3. $epochtime
(या के साथ एक चर में संग्रहीत -s var)