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"

그런 다음 이를 사용하여 다음 값을 비교(AND ksh93)할 수 있습니다.

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

이것은 ksh매개변수 확장을 사용합니다 ${parameter//pattern/string}. 맨페이지에서:

매개변수를 확장하고 가장 긴 일치 패턴을 지정된 문자열로 바꿉니다. [...] 패턴의 각 일치는 지정된 문자열로 대체됩니다.

따라서 및 09:30:15로 확장합니다 . 이는 유틸리티가 비교할 수 있는 정수입니다 . 매뉴얼 페이지에서:09301513:00:34130434test

   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2

편집하다: ksh88이 기능이 없는 with를 먼저 제거한 다음 값을 비교 ${parameter//pattern/string}해야 합니다 .:sed

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

관련 정보