printf - отображение текста в соответствии со строкой формата
Синтаксис
printf FORMAT [ARGUMENT ...]
Описание
printf использует строку формата FORMAT для вывода аргументов ARGUMENT. Это означает, что она принимает спецификаторы формата в строке формата и заменяет каждый из них аргументом.
Аргумент FORMAT повторно используется столько раз, сколько необходимо для преобразования всех заданных аргументов. Таким образом, printf %s\n flounder catfish clownfish shark выведет четыре строки.
В отличие от echo, printf не добавляет новую строку, если она не указана как часть строки.
Она не поддерживает никаких опций, поэтому нет необходимости в разделителе --, что упрощает использование произвольного ввода по сравнению с echo. [1]
Спецификаторы формата
Допустимые спецификаторы формата взяты из функции библиотеки C printf(3):
-
%dили%i: Аргумент будет использован как десятичное целое число (со знаком или без знака) -
%o: Восьмеричное беззнаковое целое число -
%u: Беззнаковое десятичное целое число — это означает, что отрицательные числа будут оборачиваться -
%xили%X: Беззнаковое шестнадцатеричное целое число -
%f,%gили%G: Вещественное число.%fпо умолчанию имеет 6 знаков после десятичной точки (что зависит от локали — например, в de_DE это будет,).%gи%Gобрезают хвостовые нули и переключаются на научную запись (например,%e) при достаточно малых или достаточно больших числах. -
%eили%E: Вещественное число в экспоненциальной (XXXeYY) записи -
%s: Строка -
%b: Как строка, интерпретирующая экранирование обратной косой черты, за исключением того, что восьмеричные экранирования имеют вид 0 или 0ooo.
%% обозначает буквальный символ «%».
Преобразование может завершиться ошибкой, например, «102.234» не может без потерь преобразовываться в целое число, что заставляет printf вывести ошибку. Если вы готовы потерять информацию, отключите ошибки с помощью 2>/dev/null.
Число между % и буквой формата задаёт ширину. Результат будет дополняться пробелами слева.
Экранированные обратные косые черты
printf также знает ряд экранированных обратных косых черт:
-
\"двойная кавычка -
\\обратная косая черта -
\aсигнал (звонок) -
\bвозврат на один символ назад -
\cбольше не выводить -
\eescape -
\fподача формы -
\nновая строка -
\rвозврат каретки -
\tгоризонтальная табуляция -
\vвертикальная табуляция -
\oooвосьмеричное число (ooo — 1–3 цифры) -
\xhhшестнадцатеричное число (hhh — 1–2 цифры) -
\uhhhh16-битный символ Unicode (hhhh — 4 цифры) -
\Uhhhhhhhh32-битный символ Unicode (hhhhhhhh — 8 цифр)
Ошибки и код возврата
Если заданный аргумент не подходит для заданного формата (например, при попытке преобразовать число, как 3.141592, в целое число), printf выводит ошибку в stderr. После этого printf также вернёт ненулевое значение, но всё равно попытается вывести как можно больше информации.
Он также вернёт ненулевое значение, если вообще не было передано аргументов, в этом случае он ничего не выведет.
Этот printf импортирован из printf в GNU Coreutils версии 6.9. Если вы хотите использовать более новую версию printf, например, ту, что поставляется с вашей ОС, попробуйте command printf.
Пример
printf '%s\t%s\n' flounder fish
Будет выведено «flounder fish» (разделенные символом табуляции), за которым следует символ новой строки. Это полезно для написания завершений, так как fish ожидает, что скрипты завершения выведут опцию и описание, разделённые символом табуляции.
printf '%s: %d' "Number of bananas in my pocket" 42
Будет выведено «Количество бананов в моём кармане: 42», without и новая строка.
См. также
- команду echo для более простого вывода
Примечания
© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.7/cmds/printf.html