walt@bat:~(0)$ /usr/bin/time sleep 2
0.00user 0.00system 0:02.04elapsed 0%CPU (0avgtext+0avgdata 1756maxresident)k
80inputs+0outputs (1major+73minor)pagefaults 0swaps
walt@bat:~(0)$ /usr/bin/time -v sleep 2
Command being timed: "sleep 2"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1828
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 73
Voluntary context switches: 2
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
walt@bat:~(0)$
或者,如果您真的想手动完成,请阅读man date并使用date +%s.%N(%s = seconds since Epoch, %N = nanoseconds)
SECONDS
Each time this parameter is referenced, the number of seconds
since shell invocation is returned. If a value is assigned to
SECONDS, the value returned upon subsequent references is the
number of seconds since the assignment plus the value assigned.
Bash 对此有一个内置函数,称为
time
. 只需将它添加到任何命令,它就会计算命令运行所需的时间。有关更多信息,请参阅help time
:)zsh 有一个类似的内置函数,也称为
time
,但没有help time
. 这是示例输出:除了
time
内置的,还有 exists/usr/bin/time
,它通常更有用。或者,如果您真的想手动完成,请阅读
man date
并使用date +%s.%N
(%s = seconds since Epoch, %N = nanoseconds)如果您使用的是
bash
orzsh
shell,并且只需要几秒钟的分辨率,那么您可以使用它们的SECONDS
shell 变量。来自man bash
:因此,如果您在执行命令(或命令序列)之前分配零值,则减法已为您完成。
前任。
有趣的是,
ksh93
有一个SECONDS
计时器,但它似乎提供毫秒分辨率:(Korn shell - 早于
bash
并且zsh
- 更普遍地能够处理非整数 shell 算术。)修复你的代码
(假设您使用的是 Bash)
这应该输出
2 seconds
.(注意通常你应该引用所有扩展,但这些值保证是整数。)
您的代码有问题
variable=$(command)
.date
您编写它的方式,它将begin_time
作为环境变量调用 - 根本不是您想要的。date
的输出是特定于语言环境的。这就是我改用 Unix 时间的原因。$((expression))
.$(command)
$variable
或${variable}
。