web-dev-qa-db-ja.com

bashでそれらの(日付)値を比較する方法

次の形式の2つの文字列を比較する必要があります。

2013-12-31T00:00:00
2014-11-19T15:40:30

そのカスタム日時形式。私はさまざまなことを試しましたが、どれもうまくいきませんでした:

if [ ${val1} < ${val2} ] || [ ${val1} == ${val2} ]; then ...

または

if [ ${val1} <= ${val2} ]

または

if [[ ${val1} -el ${val2} ]]

みんなありがとう!

1
Michael Niemand

Bashには独自のテスト構文があり、>および<を使用できます。

$ val1=2013-12-31T00:00:00
$ val2=2014-11-19T15:40:30
$ [[ $val1 > $val2 ]]
$ echo $?
1
$ [[ $val1 < $val2 ]]
$ echo $?
0

または、 nixタイムスタンプと整数値の比較 を使用することもできます。

$ val1=$(date --date='2013-12-31T00:00:00' +%s)
$ val2=$(date --date='2014-11-19T15:40:30' +%s)
$ [ $val1 -gt $val2 ]
$ echo $?
1
$ [ $val1 -lt $val2 ]
$ echo $?
0
3
l0b0