time为啥是关键字?

前面提到time其实是shell的一个关键字。

大家看了都奇怪为啥它非得是关键字?我今天仔细琢磨了一下,觉得有这么两个理由:

1. 为了让time也可以对cd之类的内置命令进行计时,比如:

$ time cd /

real 0m0.000s
user 0m0.000s
sys 0m0.000s

如果time是外部命令,或者shell内置命令的话,它根本就不好识别shell内置的cd,所以得是关键字。或者说只有是关键字才是这里最好的解决方案。

2. 为了重定向的考虑,比如:

$ time ls -l > /dev/null 2>&1

real 0m0.193s
user 0m0.005s
sys 0m0.005s

如果time是个命令,它的输出也会被重定向了,而它是关键字,所以它本身不会受影响。同理,管道也影响不了它:

$ ls -l | wc -l
25
$ time ls -l | wc -l
25

real 0m0.056s
user 0m0.006s
sys 0m0.007s

问题:那究竟如何重定向time自己的输出呢??

答:$ { time ls; } 2> /dev/null

参考:http://www.cs.tut.fi/~jarvi/tips/bash.html