您可以使用该date
命令获取要进行计时的工作之前和之后的当前时间,并计算出这样的时差:
#!/bin/bash
T="$(date +%s)"
sleep 2
T="$(($(date +%s)-T))"
echo "Time in seconds: ${T}"
printf "Pretty format: %02d:%02d:%02d:%02d\n" "$((T/86400))" "$((T/3600%24))" "$((T/60%60))" "$((T%60))""
注意:
$((...))可以用于bash中的基本算术-注意:请不要在减号前放置空格-因为这可能被解释为命令行选项。
另请参阅:http : //tldp.org/LDP/abs/html/arithexp.html
编辑:
此外,您可能想看看sed来从time生成的输出中搜索和提取子字符串。
编辑:
以毫秒为单位计时的示例(实际上是纳秒,但在此处被截断为毫秒)。您的版本date
必须支持该%N
格式,并且bash
应该支持大量数字。
T="$(date +%s%N)"
sleep 2
T="$(($(date +%s%N)-T))"
S="$((T/1000000000))"
M="$((T/1000000))"
echo "Time in nanoseconds: ${T}"
printf "Pretty format: %02d:%02d:%02d:%02d.%03d\n" "$((S/86400))" "$((S/3600%24))" "$((S/60%60))" "$((S%60))" "${M}"
免责声明:
我的原始版本说
M="$((T%1000000000/1000000))"
但这已被删除,因为它显然对某些人不起作用,而据报道新版本对某些人无效。我不同意这一点,因为我认为您只需要使用其余部分,而已被淘汰。
选择适合您的东西。
printf
为此提供了语法:printf -v TimeStamp "%(%s)T" -1
和printf "%(%a %d %b %Y %T)T\n" $TimeStamp
值可以是-1
:现在,-2
:bash会话的开始,Integer
:Unix时间戳