Что делает эта команда «printf»?

15

Я проходил урок, и там я наткнулся на команду:

printf "%(%s)T"

Вывод этой команды:

1454299615

Может ли кто-нибудь сказать мне, что это за команда и что означает вывод?

rtecxs
источник
Кажется, это зависит от оболочки. Вы printfвстроенный? /usr/bin/printfна Ubuntu 14.04 дает ошибку: printf: %(: invalid conversion specification. Если вы используете bash. Попробуйте man bashвстроенную документацию.
Ариэльф

Ответы:

17

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

heemayl
источник
@rtecxs Я переместил вашу правку в другое место, чтобы все было ясно .. спасибо, в любом случае :)
heemayl
Документирована ли эта функция? Я не видел этого на printf(1)странице руководства .
Нейт Элдридж
@NateEldredge printf- встроенная функция (хотя внешняя имеет такое же поведение) .. проверьте help printf..
heemayl