HH:MM:SS形式で2回比較する - ksh

HH:MM:SS形式で2回比較する - ksh

2回(24時間制)比較できますか?私にとって必要なのは、最初の時間が2番目の時間より早いことを確認することです。

例:

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

答え1

これら2つの値が次の変数にある場合:

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

関連情報