Не похоже, date
поддерживает строку формата ввода. Таким образом, вы не сможете просто пойти дальше и передать строку на сегодняшний день. Страница man заявляет, что она принимает обычные форматы, так что, возможно, настройки вашего языка могут повлиять на это, но я не уверен в этом.
Далее, давайте посмотрим на ваш скрипт:
#!/bin/bash sec=$(TZ="UTC" date +'%s' -d "$1") $(TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S")
Здесь происходит то, что вы конвертируете $1
параметр в метку времени Linux, а затем снова конвертируете его в нужную вам строку. Один из возможных подходов к работе с вашим вводом - переформатировать $1
строковый параметр.
Вы можете сделать это в качестве примера, используя sed
подходящее регулярное выражение. Помните, что вы должны заранее убедиться, что у вас есть допустимая строка и что любые изменения формата могут нарушить это.
#!/bin/bash intputdate=$(echo $1 | sed -re 's/([0-9])\.([0-9])\.([0-9])/\3-\2-\1/') sec=$(TZ="UTC" date +'%s' -d "$intputdate") echo $(TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S")
Изменить: Неправильные имена переменных, безусловно, помогает.