我第一次深入研究 bash,并想尝试测试一些代码来比较实现相同目标的不同方法。作为其中的一部分,我遇到了记录代码运行时间的 time 和 times 方法。对于通过以下方式创建的简单的一行脚本:
echo "echo a script" > script
我得到:
$ time bash ./script
a script
real 0m0.009s
user 0m0.006s
sys 0m0.002s
$ times bash ./script
0m0.082s 0m0.074s
0m0.019s 0m0.041s
$ /usr/bin/time bash ./script
a script
0.00user 0.00system 0:00.00elapsed 80%CPU (0avgtext+0avgdata 3328maxresident)k
0inputs+0outputs (0major+148minor)pagefaults 0swaps
$ type -a time
time is a shell keyword
time is /usr/bin/time
time is /bin/time
$ type -a times
times is a shell builtin
$ which -a time
/usr/bin/time
/bin/time
bash -c help
带我去:
$ help time
time: time [-p] pipeline
Report time consumed by pipeline's execution.
$ help times
times: times
Display process times.
并man time
给我:
TIME(1)........通用命令手册.........TIME(1)
NAME time - 运行程序并总结系统资源使用情况
bash shell 的用户需要使用显式路径才能运行外部时间命令,而不是 shell 内置变体。在时间安装在 /usr/bin 中的系统上,第一个示例将变为
/usr/bin/time wc /etc/hosts
bash 参考手册将其描述time
为保留字,“对 shell 有特殊含义。它们用于开始和结束 shell 的复合命令”,而将times
其描述为shell 内置命令,“继承自 Bourne Shell。这些命令按照 POSIX 标准的规定来实现”。
除了手册中的一句话:
使用时间作为保留字允许对 shell 内置函数、shell 函数和管道进行计时。外部时间命令无法轻松地对这些进行计时。
我看不出三个非常相似的命令的原因。
我应该使用哪一种来测试不同的方法并优化我的脚本?