如何在bash脚本中获取经过的时间(以毫秒为单位)?

Ton*_*ark 10 bash shell time

我尝试使用"t1 = $(date +%s%N)"来获取以纳秒为单位的时间,但我一直在收到此错误:

./script.sh: line 10: 1292460931N: value too great for base (error token is "1292460931N")
Run Code Online (Sandbox Code Playgroud)

我在线查看,似乎你可以使用"time"命令,但是我找不到使用time命令的好例子.任何帮助,将不胜感激 :)

Ben*_*son 5

date您正在使用的命令不支持,%N因此您的输出就是字面意思1292460931N.我在Linux上试过它并且它有效,但在FreeBSD上我看到你得到的结果.在shell中运行该date命令,看看会发生什么.你有可能使用它busybox吗?它的截止日期命令也省略了,%N但我刚试过的版本给了我1292463535%N.


Cha*_*tin 3

好的,这里有几件事。

首先,无论如何,没有多少系统可以为您提供实际上精确到纳秒的时间。

现在,使用 time,无论是 as/usr/bin/time还是 shell 内置命令 (bash:)help time都非常容易。如果您想要计时的命令是foo1,那么

$ time foo
Run Code Online (Sandbox Code Playgroud)

将在 stderr 上以三行形式返回经过的时间

real 0m0.001s
user 0m0.000s
sys  0m0.000s
Run Code Online (Sandbox Code Playgroud)

您可以以任何您喜欢的方式使用它。

如果你想获得更好、更准确的计时,请多次执行该命令。这就像编写一个短循环一样简单

time for i in 0 1 2 3 4; do foo; done
Run Code Online (Sandbox Code Playgroud)

将执行foo五次并给出总时间。您可能想要执行 5 次以上的迭代,因此您可能需要一个计数器和一个 while 循环等。