通常,该time
命令输出三行:
> time sleep 2
real 0m2.003s
user 0m0.000s
sys 0m0.006s
但是,当附加变量赋值时,输出变为一行:
> VAR="" time sleep 2
0.00user 0.00system 0:02.00elapsed 0%CPU (0avgtext+0avgdata 2060maxresident)k
0inputs+0outputs (0major+86minor)pagefaults 0swaps
为什么会这样?有没有办法在三行输出的同时保持变量赋值?
在 Bash
time
中是一个保留字(keyword),它不仅可以放在一个简单的命令之前并衡量它;它可以测量管道。因此,它必须是第一个词。此语法仅通知 Bash 您要测量时间;管道的其余部分仍然由 Bash 处理,就好像time
不存在一样。如果
time
不是第一个单词并且仍然可以解释为命令,则将其解释为常规外部命令(甚至不是内置命令),查找$PATH
并执行;例如可以/usr/bin/time
。该工具处理其参数并从中构建实际命令。这两个实用程序产生不同格式的输出。
是的。您可以
time
用作第一个单词,因此它被解释为关键字:请注意,两种实现都支持
-p
将输出格式更改为POSIX 指定的格式(事实上-p
POSIX 需要对自身的支持)。这意味着以下两个命令将产生相同格式的输出:然而,在引擎盖下,这些是非常不同的。
Time 将其输出发送到 STDERR 而不是 STDOUT。
虽然我不清楚您打算如何使用捕获的数据,但有几个选项,所以我将其分为三行。
前两个选项不使用 -p 格式化选项(专为符合 POSIX 而设计)。第三个选项可以。
如您所见,输出有所不同。如果你愿意,可以问我问题。(您可以删除 unset 命令,因为我使用它来执行多个测试。)