Я полагаю, что может быть проще попросить date
выполнить преобразование в ожидаемый формат и проверить, идентичны ли формат ввода-даты и формат вывода-даты.Если они идентичны, строка ввода-даты является допустимой строкой:
Если вы используете следующую команду, она преобразует строку в ваш действительный формат:
date -d "input-date" "+%b %d %T"
- При невозможности ввода даты вернется пустая строка:
- Недопустимая дата ввода вернет другую строку
Примеры "
input-date (d1) | output-date (d2)| d1 == d2 | input valid
----------------+-----------------+----------+-------------
Mar 15 14:02:15 | Mar 15 14:02:15 | yes | yes
Mar 15 14:2 | Mar 15 14:02:00 | no | no
Mar 32 14:02:15 | | no | no
Mak 15 14:02:15 | | no | no
Mar 15 24:02:15 | | no | no
Итак, ваш тест будетвыглядит так:
d1="Mar 15 14:20:48"
d2=$(date -d "$d1" "+%b %d %T" 2> /dev/null)
if [[ "$d1" == "$d2" ]]; then
echo "the dates are the same"
fi
Этот метод немного безопаснее, чем использование регулярного выражения, так как многие строки могут проходить регулярное выражение, но не являются допустимой датой. Простым примером будет "XYZ 39 29:59:12 "
В случае вопроса ОП, он будет читать:
if [[ "${LASTTS}" == $(date -d "${LASTTS}" "+%b %d %T" 2> /dev/null) ]]; then