Команда printf в Linux

Linux 命令大全Полный справочник команд Linux


1. Обзор команды printf

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

Ключевые особенности

  • Точное форматирование: Управляет выравниванием, шириной, точностью вывода и т. д.
  • Нет автоматического перевода строки: По умолчанию не добавляет перевод строки в конце вывода (в отличие от echo)
  • Поддержка нескольких языков: Поддерживает вывод символов Unicode
  • Подстановка переменных: Позволяет вставлять значения переменных в строки

2. Базовый синтаксис

printf format-string [arguments...]

Описание параметра

  • format-string: Строка формата, содержащая обычные символы и спецификаторы формата
  • arguments: Список аргументов, соответствующий спецификаторам формата

3. Подробное объяснение спецификаторов формата

Спецификаторы формата начинаются с%; основная форма выглядит так:

%[flags][width][.precision]specifier

Распространённые спецификаторы формата

Спецификатор Описание Пример
%s String printf "%s" "hello"
%d Десятичное целое число printf "%d" 123
%f Число с плавающей запятой printf "%f" 3.14
%x Шестнадцатеричное целое число (нижний регистр) printf "%x" 255
%X Шестнадцатеричное целое число (верхний регистр) printf "%X" 255
%o Восьмеричное целое число printf "%o" 8
%c Одиночный символ printf "%c" 65

Параметры модификаторов

1. Флаги

Флаг Описание Пример
- Выравнивание по левому краю printf "%-10s" "hi"
+ Отображать знак плюс/минус printf "%+d" 123
0 Дополнять нулями printf "%05d" 12
Память Оставьте пробел перед положительными числами printf "% d" 123
# Специальный формат (например, префикс 0x) printf "%#x" 255

2. Ширина

Задает минимальную ширину поля, дополняет при недостаточной ширине

Пример

printf "%10s\n" "hello"  # Выравнивание по правому краю, ширина 10
printf "%-10s\n" "hello" # Выравнивание по левому краю, ширина 10

3. Точность (.precision)

Для чисел с плавающей запятой задает количество цифр после десятичной точки; для строк задает максимальное количество символов

Пример

printf "%.2f\n" 3.14159  # Вывод 3.14
printf "%.5s\n" "abcdefg" # Вывод abcde

4. Практические примеры

Пример 1: Базовый форматированный вывод

Пример

printf "Name: %s, Age: %d, Height: %.2f\n" "Alice" 25 1.68

Вывод:

Name: Alice, Age: 25, Height: 1.68

Пример 2: Вывод с табличным выравниванием

Пример

printf "%-10s %-10s %-10s\n" "Name" "Age" "Score"
printf "%-10s %-10d %-10.2f\n" "Alice" 25 89.5
printf "%-10s %-10d %-10.2f\n" "Bob" 23 92.3

Вывод:

Name       Age        Score     
Alice      25         89.50     
Bob        23         92.30     

Пример 3: Обработка специальных символов

Пример

printf "Temperature: %d°C\n" 25
printf "Path: %s\n" "/home/user"
printf "Alert: \a\n"  # Символ звонка

Пример 4: Подстановка переменных

Пример

name="John"
age=30
printf "Пользователь: %s, %d лет\n" "$name" "$age"

5. Продвинутое использование

1. Форматирование вывода даты

Пример

printf "Сегодня %(%Y-%m-%d)T\n" -1

2. Цветной вывод

Пример

printf "\e[31mКрасный текст\e[0m\n"
printf "\e[32mЗелёный текст\e[0m\n"

3. Динамическое указание ширины

Пример

width=20
printf "%*s\n" $width "По правому краю"

6. Типичные проблемы и рекомендации

Проблема с переводом строки: printf по умолчанию не добавляет перевод строки; его нужно добавлять вручную\n

Пример

printf "Без новой строки"
printf "Добавить перевод строки\n"

Несовпадение количества аргументов: Когда аргументов меньше, чем спецификаторов формата, будут выведены неопределённые значения

Пример

printf "%s %s\n" "only_one"  # Второй %s выведет пустое значение

Обработка кавычек: Рекомендуется заключать строку формата в двойные кавычки, а также использовать двойные кавычки для переменных

Пример

printf "%s\n" "$variable"

Экранирование специальных символов: Специальные символы нужно экранировать с помощью обратных слешей в строке формата


7. printf против echo

Характеристика printf echo
Перевод строки Необходимо явно добавить \n Добавляется автоматически
Форматирование Поддерживает сложное форматирование Простой вывод
Согласованность Единообразное поведение в разных системах Может различаться в разных системах
Подстановка переменных Должно быть указано явно Автоматическая подстановка
Специальные символы Требуется экранирование Некоторые версии поддерживают опцию -e

Linux 命令大全Полный справочник команд Linux

Другие расширения