我正在用 bash 编写一个脚本,以计算执行命令所耗费的时间,请考虑:
STARTTIME=$(date +%s)
#command block that takes time to complete...
#........
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
我想我的逻辑是正确的,但我最终得到了以下打印输出:
完成这项任务需要几秒钟......";
我的字符串评估有问题吗?
我相信 bash 变量是无类型的,但我希望 bash 中能有一个 "string to integer" 方法。
无论是 $(())
还是 $[]
都可以计算算术运算的结果。 而您使用的 $()
,只是将字符串作为命令进行运算。 这是一个微妙的区别。 希望对您有所帮助。
正如 tink 在此答案的评论中指出的,$[]
已被弃用,而$(())
则更受欢迎。
试着使用时间和经过秒选项:
在 bash 下使用 /usr/bin/time -f%e sleep 1
。
或在交互式 bash 中使用 \time -f%e sleep 1
。
参见 time man 页面:
bash shell 用户需要使用明确的路径才能运行 外部 time 命令,而不是 shell 内置变量。在系统 系统上,time 安装在 /usr/bin,第一个例子将变为 /usr/bin/time wc /etc/hosts
和
FORMATTING THE OUTPUT
...
% A literal '%'.
e Elapsed real (wall clock) time used by the process, in
seconds.