Ответы:
Это способ выразить отформатированное время с помощью printf.
Формат такой:
%(FORMAT)T
Где FORMATопределяется strftime(3).
Итак, чтобы получить время эпохи (время в секундах с 1970-01-01 00:00:00 UTC), нам нужен strftime(3)формат %s:
printf "%(%s)T\n"
Обратите внимание, что вам также нужно \nв конце добавить новую строку, поскольку printf(в отличие от echo) не добавляет ее по умолчанию.
Пример:
$ printf "%(%s)T\n"
1454300377
$ printf "%(%Y-%m-%d)T\n"
2016-02-01
$ printf "%(%Y-%m-%d %H:%M:%S)T\n"
2016-02-01 10:20:27
Для полноты картины вы также можете использовать dateкоманду в похожем strftime(3)формате, чтобы получить время:
$ date '+%s'
1454300542
$ date '+%Y-%m-%d' ## Short form: date -I
2016-02-01
$ date '+%Y-%m-%d %H:%M:%S'
2016-02-01 10:22:47
Примечание : Данное поведение является специфичным для bash«s и ksh» ы встроенных функций printf, и не работает с /usr/bin/printf, cshи zshвстроенными модулями.
printf(1)странице руководства .
printf- встроенная функция (хотя внешняя имеет такое же поведение) .. проверьте help printf..
printfвстроенный?/usr/bin/printfна Ubuntu 14.04 дает ошибку:printf: %(: invalid conversion specification. Если вы используетеbash. Попробуйтеman bashвстроенную документацию.