Що робить ця команда “printf”?


15

Я переглядав підручник і там натрапив на команду:

printf "%(%s)T"

Вихід цієї команди:

1454299615

Хто-небудь, будь ласка, скажіть мені, що це за команда і що означає вихід?


1
Це, здається, залежить від оболонки. Ваш printfвбудований? /usr/bin/printfна Ubuntu 14.04 дає помилку: printf: %(: invalid conversion specification. Якщо ви використовуєте bash. Спробуйте man bashскласти вбудовану документацію.
аріельф

Відповіді:


18

Це спосіб виразити відформатований час за допомогою 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вбудованими модулями.


@rtecxs Я перемістив вашу редакцію в інше місце, просто щоб все було зрозуміло ... все одно дякую :)
heemayl

Чи задокументована ця особливість? Я не бачив його на printf(1)сторінці man.
Nate Eldredge

@NateEldredge printf- це вбудований (хоча зовнішній має таку ж поведінку) .. перевірити help printf..
heemayl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.