Мой сценарий должен принимать 4 формата даты: гггг-мм-дд, гггг / мм / дд, дд-мм-гггг, дд / мм / гггг.
Чтобы проверить, указана ли пользователем дата dдопустимый в любом из этих форматов, он делает что-то вроде этого:
if [ "`date '+%Y-%m-%d' -d $d 2>/dev/null`" == "$d" ]
then
echo "1"
elif [ "`date '+%d-%m-%Y' -d $d 2>/dev/null`" == "$d" ]
then
echo "2"
elif [ "`date '+%Y/%m/%d' -d $d 2>/dev/null`" == "$d" ]
then
echo "3"
elif [ "`date '+%d/%m/%Y' -d $d 2>/dev/null`" == "$d" ]
then
echo "4"
else
echo `date '+%d-%m-%Y' -d $d`
echo "other"
fi
Если я установлю d на 2018-01-01, 2018/01/01 или 01.01.2008, я получу ожидаемый выходной сигнал (1, 3 и 4 соответственно).
Если я использую 01-01-2018, то вывод:
date: invalid date `01-01-2018'
other
В чем может быть причина?