什么时间日期值总是大于任何时间日期?
在脚本中,我想为变量提供一个参数,duration
以便循环将永远运行,直到我终止进程:
# `duration` has a value in seconds
end=$(($(date +%s) + duration))
while true; do
# ...
[ $(date +%s) -ge $end ] && break
# ...
done
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 10
我会把它改成:
SECONDS=0
while true; do
# ...
[ "$duration" = forever ] || [ "$SECONDS" -lt "$duration" ] || break
# ...
done
Run Code Online (Sandbox Code Playgroud)
并且duration=forever
无需担心[
系统支持的最大数量是多少。
$SECONDS
每秒自动增加。该功能来自 ksh,也可在zsh
和 中使用bash
。但是请注意,每当挂钟时间的完整秒数发生变化时,$SECONDS
inbash
都会增加,例如,如果SECONDS=0
在 12:00:00.999 运行,它将在 12:00:01.000 增加到 1,所以只有一毫秒后。
如果切换到zsh
(不再有该错误)是一个选项,您可以将其更改为:
typeset -F SECONDS=0
while true; do
# ...
(( SECONDS < duration )) || break
# ...
done
Run Code Online (Sandbox Code Playgroud)
并使用duration=inf
for 循环永远运行。这也允许分数持续时间。