Функция printf в bash
printf (print formatted, функция форматированного вывода) - встроенная функция bash; есть и бинарник, обычно, в дистрибутивах, но он будет работать только, если указать вызвать его конкретно (
/usr/bin/env
илиenv printf
).
Определена в стандарте POSIX (в отличие от (тоже) встроенной в bash функции echo), поэтому лучше переносима с POSIX-совместимыми системами.
printf, в отличие от echo, не добавляет по дефолту перевод строки.
Управляющие последовательности (\n и т.п.) будут интерпретироваться и в одинарных, и в двойных кавычках.
Дата/время в printf
В bash 4.2 добавили поддержку спецификатора формата printf %(date_format)T
, которая по дефолту выводила дату начала эпохи Unix (1970-01-01 00:00:00 -0000).
В bash 4.3 дефолтное значение стало полезней - выводились текущие дата и время. Спецификатор имеет два спец. аргумента: “-1” - текущие дата и время, “-2” - дата и время вызова оболочки.
С помощью printf -v var
можно сохранить вывод в переменную var
вместо вывода на экран (подобно функции sprintf в C):
printf можно юзать для простого логирования:
Команда date в этом плане лучше, чем printf %(date_format)T
, ибо позволяет выполнять арифметические действия с датами, например:
Но printf %(date_format)T
дает возможность не создавать подоболочку для запуска date. Это удобно, если нужно просто зафиксировать время (например, при логировании).
С помощью него можно узнать, например, какой дате и времени соответствуют 1072632362 секунд:
printf для повторного использования или отладки
%q экранирует символы в аргументе, позволяя юзать его повторно в качестве ввода.
Такое может пригодится для повторного использования в другом месте, создания форматированного вывода и отладки, когда нужно видеть скрытые управляющие символы и поля.
Соус: Книга “Идиомы Bash” → Глава 6. “Функции” → “Функция printf”