以 HH:MM:SS 格式比较两个时间 - ksh

以 HH:MM:SS 格式比较两个时间 - ksh

是否可以比较两个时间(24 小时制)?我需要的是检查第一次是否早于第二次。

例子:

$ ./script.ksh 09:30:15 13:00:34
okay
$ ./script.ksh 05:25:00 02:30:50
invalid arguments

答案1

当这两个值位于这样的变量中时:

a="09:30:15"
b="13:00:34"

然后您可以使用它来比较这些值(与ksh93):

[ "${a//':'}" -lt "${b//':'}" ] && echo "okay" || echo "invalid arguments"

这使用了kshs 参数扩展${parameter//pattern/string}。从联机帮助页:

扩展参数并用给定字符串替换最长的匹配模式。 [...] 模式的每个匹配都被给定的字符串替换。

所以扩展09:30:1509301513:00:34130434这些是实用程序可以比较的整数test。从手册页:

   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2

编辑: with ksh88which 没有这个功能${parameter//pattern/string},你必须先删除:withsed然后再比较值:

a="$(printf '%s' "$a" | sed -e 's/://g')"
b="$(printf '%s' "$b" | sed -e 's/://g')"
[ "$a" -lt "$b" ]  && echo "okay" || echo "invalid arguments"

答案2

ksh -c '
    IFS=: x=2
    set ${0+09:30:15} ${0+13:00:34}
    for t do eval "
        [ ${t#0} -lt \"\${$((x+=1))#0}\" ]" && break
    done &&
    echo "$1:$2:$3 is earlier than $4:$5:$6"
'

09:30:15 is earlier than 13:00:34

相关内容