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дальнейший вывод не производится -
\eэкранирование -
\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 для более простого вывода
Примечания
-
1 -
На самом деле, хотя
echofish поддерживает--, POSIX этого не разрешает, поэтому другие реализации не могут использоваться, если вход содержит что-либо, начинающееся с-.
© 2022 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.5/cmds/printf.html