ในกรณีที่คนจะใช้เปลือกหอยอื่น ๆ กว่า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
ตัวเลขจุดลอยตัวC เดียวดังนั้นคุณจะสูญเสียความแม่นยำเมื่อคุณใช้ในการแสดงออกทางคณิตศาสตร์ (ยกเว้นวันที่ในช่วงสองสามเดือนแรกของปี 1970)
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
ในการคำนวณความแตกต่างของเวลาที่มีความแม่นยำสูง (แม้ว่าฉันสงสัยว่าคุณต้องการความแม่นยำมากกว่ามิลลิวินาที) คุณอาจต้องการใช้$epochtime
อาร์เรย์พิเศษแทน (ซึ่งมีวินาทีและนาโนวินาทีเป็นองค์ประกอบแยกสองส่วน)
ตั้งแต่รุ่น 5.7 (2018) strftime
เชลล์ builtin ยังสนับสนุน%N
รูปแบบ nanosecond à la GNU date
และ a %.
เพื่อระบุความแม่นยำดังนั้นจำนวนมิลลิวินาทีนับตั้งแต่ยุคสามารถดึงได้ด้วย:
zmodload zsh/datetime
strftime %s%3. $epochtime
(หรือเก็บไว้ในตัวแปรด้วย-s var
)