如何在 bash 脚本中使用 $SECONDS?

如何在 bash 脚本中使用 $SECONDS?

我想将命令的结果保存$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

相关内容