Ответы:
Это способ выразить отформатированное время с помощью 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
встроенную документацию.