Утилита
GNU date
немного грубая и продолжает неправильно понимать входную строку.Для правильной оценки старайтесь всегда указывать date
даты в @
секундах с начала эпохи или в одной форме, как в man date вроде "2004-02-29 16:21:42"
.(Если у вас дата freebsd с опцией -f
.)
str=20181102
date --date="$(echo "$str" | cut -c 1-4)-$(echo "$str" | cut -c 5,6)-$(echo "$str" | cut -c 7,8) 00:00:00" +%Y
Но на самом деле, если вы знаете, что первые 4 символа - это год, почему бы вам просто не получить первые 4символы?
str=20181102
echo "$str" | cut -c 1-4
Также обратите внимание, что делать echo $(date ...)
бессмысленно.Это просто date ...
.echo
ни в коем случае не нужен.