什么时间日期值总是大于任何时间日期?

0 bash coreutils date

什么时间日期值总是大于任何时间日期?

在脚本中,我想为变量提供一个参数,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。但是请注意,每当挂钟时间的完整秒数发生变化时,$SECONDSinbash都会增加,例如,如果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=inffor 循环永远运行。这也允许分数持续时间。