我想将$SECONDS命令的结果保存到一个变量中,以格式打印时间HH:MM:SS。
这是我迄今为止尝试过的。我尝试以不同的方式打印它并且总是得到如下结果0:
time_spent="$SECONDS"
echo "Time: $time_spent"
Run Code Online (Sandbox Code Playgroud)
我想在关闭控制台时打印在 shell 中花费的时间。我创建了一个每次关闭控制台时都会运行的脚本。
要$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
Run Code Online (Sandbox Code Playgroud)
您已经引用了bash内部变量SECONDS(它输出自调用当前 shell 实例以来经过的秒数)并将该值保存为另一个变量time_spent。现在,之后每次检查 variable 的值时time_spent,您都会得到相同的值——保存的值,在SECONDS.
要动态获取SECONDS,您应该$SECONDS直接引用而不是使用中间变量:
echo "Time: $SECONDS"
Run Code Online (Sandbox Code Playgroud)
如果您坚持使用中间变量,请确保$SECONDS每次都进行扩展。
关于价值SECONDS的存在0,你可以很容易地重现此:
% bash -c 'echo $SECONDS'
0
Run Code Online (Sandbox Code Playgroud)
关键是:当你计算这个值时,还不是一秒,所以这个值是0正确的。
如果您确定这$SECONDS将少于 1 天(即 86400 秒),那么GNU core-utils date可以很好地完成所需的格式化:
$ date -ud "@$SECONDS" "+Time elapsed: %H:%M:%S"
Time elapsed: 00:32:05
$
Run Code Online (Sandbox Code Playgroud)
这是一个快速的,自打开外壳以来给出了数小时的分秒:
~$ cat how_long_open
#!/bin/bash
time=$SECONDS
printf '%dh:%dm:%ds\n' $(($time/3600)) $(($time%3600/60)) $(($time%60))
Run Code Online (Sandbox Code Playgroud)
由于脚本在子 shell 中运行,因此获得输出的最佳方法是获取脚本而不是调用它。
例子:
不采购脚本
~$ ./how_long_open
0h:0m:0s
Run Code Online (Sandbox Code Playgroud)
随着采购脚本
~$ source ./how_long_open
1h:24m:40s
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
11693 次 |
| 最近记录: |