我想将命令的结果保存$SECONDS
到变量中,以格式打印时间HH:MM:SS
。
这是我到目前为止尝试过的方法。我尝试用不同的方法打印它,但总是得到如下结果0
:
time_spent="$SECONDS"
echo "Time: $time_spent"
我想在关闭控制台时打印在 shell 中花费的时间。我创建了一个在每次关闭控制台时运行的脚本。
答案1
要$SECONDS
进入 HH:MM:SS 格式,您需要进行一些(整数)数学运算:
secs=$SECONDS
hrs=$(( secs/3600 )); mins=$(( (secs-hrs*3600)/60 )); secs=$(( secs-hrs*3600-mins*60 ))
printf 'Time spent: %02d:%02d:%02d\n' $hrs $mins $secs
Time spent: 431:48:03
答案2
如果你确定这$SECONDS
将少于 1 天(即 86400 秒),那么GNU 核心实用程序 date
很好地完成了所需的格式化:
$ date -ud "@$SECONDS" "+Time elapsed: %H:%M:%S"
Time elapsed: 00:32:05
$
答案3
您已引用bash
内部变量SECONDS
(输出自调用当前 shell 实例以来经过的秒数)并将该值保存为另一个变量time_spent
。现在,此后每次检查变量的值时time_spent
,您都会得到相同的值——在扩展时保存的值SECONDS
。
要动态获取SECONDS
,您应该$SECONDS
直接引用而不是使用中间变量:
echo "Time: $SECONDS"
如果坚持使用中间变量,请确保$SECONDS
每次都进行扩展。
SECONDS
关于存在的价值0
,您可以轻松重现这一点:
% bash -c 'echo $SECONDS'
0
重点是:当您计算该值时,还不到一秒,因此该值是0
正确的。
答案4
另一种使用方法printf
:
SECONDS=0
# do something
TZ=UTC printf '%(%H:%M:%S)T\n' $SECONDS