如何在bash中更简便地计算当日分钟数
可用的更优实现方案如下:
方案1:原生算术运算替代外部bc,兼容性最好
不需要调用bc和管道,直接用bash自带的整数计算能力即可。代码中加10#前缀是为了避免08、09这类带前导零的数值被bash识别为八进制数抛出语法错误:
mod=$(( 10#$(date +%H) * 60 + 10#$(date +%M) )) echo "$mod"
方案2:仅调用1次date命令,降低额外开销
相比方案1减少一次date调用,性能更优:
read -r h m < <(date +'%H %M') mod=$(( 10#$h * 60 + 10#$m )) echo "$mod"
方案3:纯内置命令实现,无外部进程调用,性能最优
你使用的bash 4.4版本完全支持printf的%(fmt)T时间格式化参数,全程不需要调用任何外部命令,适合高频调用的场景:
# 读取当前时间的时间戳存入变量now_ts printf -v now_ts '%(%s)T' -1 # 计算当日已过分钟数:当日已过秒数 = 时间戳取余86400(单日总秒数),再整除60得到分钟数 mod=$(( now_ts % 86400 / 60 )) echo "$mod"
内容的提问来源于stack exchange,提问作者ClimateUnboxed
相关产品推荐
相关产品推荐

