Главная > Обработка текста и поиск > printf

printf: Форматированный вывод

`printf` — это команда, которая выводит данные в стандартный вывод в соответствии с указанной строкой формата, аналогично функции `printf` в языке C. Вы можете форматировать переменные или литеральные значения в различных форматах (целые числа, числа с плавающей запятой, строки и т. д.) и вставлять специальные символы с помощью управляющих последовательностей. Она обеспечивает более точный контроль вывода, чем команда `echo`.

Обзор

`printf` точно контролирует вывод, используя строку формата и аргументы. Она используется в скриптах для различных целей, таких как создание отчетов и форматирование сообщений журнала.

Основные возможности

  • Поддержка различных спецификаторов формата (%s, %d, %f и т. д.)
  • Поддержка управляющих последовательностей (\n, \t, \x и т. д.)
  • Вывод по типам данных, таким как целые числа, числа с плавающей запятой, строки
  • Возможность управления шириной, точностью и выравниванием вывода

Основные опции (спецификаторы формата и управляющие последовательности)

Команда `printf` управляет своим поведением не столько через традиционные опции, начинающиеся с `-`, сколько через 'спецификаторы формата' и 'управляющие последовательности', включенные в строку формата. Ниже приведены часто используемые из них.

Спецификаторы формата

Управляющие последовательности

Сгенерированная команда:

Комбинируйте команды.

Описание:

`printf` Запускает команду.

Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.

Примеры использования

Примеры использования `printf` с различными спецификаторами формата и управляющими последовательностями.

Базовый вывод строки

printf "Hello, World!\n"

Выводит простую строку и переходит на новую строку.

Смешанный вывод целых чисел и строк

printf "Имя: %s, Возраст: %d лет\n" "Иван" 30

Форматирует и выводит целое число и строку вместе.

Указание точности числа с плавающей запятой

printf "Число Пи: %.2f\n" 3.141592

Выводит число с плавающей запятой с двумя знаками после запятой.

Ширина и выравнивание вывода

printf "%-10s %5d\n" "Товар" 123

Выравнивает строку по левому краю в 10 позициях, а целое число — по правому краю в 5 позициях.

Вывод в шестнадцатеричном и восьмеричном формате

printf "Десятичное: %d, Шестнадцатеричное: %x, Восьмеричное: %o\n" 255 255 255

Выводит число в шестнадцатеричном и восьмеричном формате.

Использование с переменными

NAME="Петр"
SCORE=95
printf "Студент: %s, Оценка: %d балла\n" "$NAME" "$SCORE"

Использует переменные оболочки в качестве аргументов `printf` для вывода.

Советы и рекомендации

Советы и моменты, на которые следует обратить внимание при эффективном использовании `printf`.

Отличия от `echo`

`echo` в основном используется для простого вывода строк и имеет ограничения в интерпретации управляющих последовательностей (требуется опция `-e`) или форматировании. В отличие от этого, `printf` позволяет точно контролировать формат вывода с помощью спецификаторов формата и всегда интерпретирует управляющие последовательности.

  • Управляющие последовательности: `printf` всегда интерпретирует управляющие последовательности. Для `echo` требуется опция `-e`.
  • Форматирование: `printf` поддерживает различные спецификаторы формата, такие как `%s`, `%d` и другие, позволяя точно контролировать формат вывода. `echo` не имеет таких функций.
  • Перевод строки: `echo` по умолчанию переходит на новую строку после вывода, тогда как `printf` требует явного указания `\n`.

Соответствие строки формата и аргументов

Количество спецификаторов формата в строке формата должно соответствовать количеству предоставленных аргументов. Если аргументов недостаточно, могут использоваться значения по умолчанию (например, 0 или пустая строка) в зависимости от оболочки, а если аргументов слишком много, избыточные аргументы игнорируются. Это может привести к неожиданным результатам, поэтому следует быть осторожным.

Осторожность при использовании управляющих последовательностей

В частности, для вывода символа `\` необходимо использовать его дважды, например `\\`. Оболочка может сначала интерпретировать обратную косую черту, поэтому может потребоваться предварительная обработка перед передачей в `printf`. Обычно безопасно заключать строку формата в двойные кавычки (`"`).


Те же команды в категории