Bash

什麼時間日期值總是大於任何時間日期?

  • April 5, 2021

什麼時間日期值總是大於任何時間日期?

在腳本中,我想為變數提供一個參數,duration以便循環將永遠執行,直到我終止程序:

# `duration` has a value in seconds
end=$(($(date +%s) + duration))  

while true; do
   # ...
   [ $(date +%s) -ge $end ] && break
   # ...
done

我將其更改為:

SECONDS=0

while true; do
   # ...
   [ "$duration" = forever ] || [ "$SECONDS" -lt "$duration" ] || break
   # ...
done

並且duration=forever無需擔心[系統支持的最大數量是多少。

$SECONDS每秒自動遞增。該功能來自 ksh 並且在zsh和中也可用bash。但是請注意,$SECONDS每次bash掛鐘時間的整秒更改時都會遞增,例如,如果SECONDS=0在 12:00:00.999 執行,它將在 12:00:01.000 遞增到 1,因此只有一毫秒後。

如果切換到zsh(不再有該錯誤)是一個選項,您可以將其更改為:

typeset -F SECONDS=0
while true; do
   # ...
   (( SECONDS < duration )) || break
   # ...
done

並使用duration=inffor 循環永遠執行。這也允許分數持續時間。

引用自:https://unix.stackexchange.com/questions/642776