Команда printf в 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
3. Точность (.precision)
Для чисел с плавающей запятой задает количество цифр после десятичной точки; для строк задает максимальное количество символов
Пример
printf "%.5s\n" "abcdefg" # Вывод abcde
4. Практические примеры
Пример 1: Базовый форматированный вывод
Пример
Вывод:
Name: Alice, Age: 25, Height: 1.68
Пример 2: Вывод с табличным выравниванием
Пример
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 "Path: %s\n" "/home/user"
printf "Alert: \a\n" # Символ звонка
Пример 4: Подстановка переменных
Пример
age=30
printf "Пользователь: %s, %d лет\n" "$name" "$age"
5. Продвинутое использование
1. Форматирование вывода даты
Пример
2. Цветной вывод
Пример
printf "\e[32mЗелёный текст\e[0m\n"
3. Динамическое указание ширины
Пример
printf "%*s\n" $width "По правому краю"
6. Типичные проблемы и рекомендации
Проблема с переводом строки: printf по умолчанию не добавляет перевод строки; его нужно добавлять вручную\n
Пример
printf "Добавить перевод строки\n"
Несовпадение количества аргументов: Когда аргументов меньше, чем спецификаторов формата, будут выведены неопределённые значения
Пример
Обработка кавычек: Рекомендуется заключать строку формата в двойные кавычки, а также использовать двойные кавычки для переменных
Пример
Экранирование специальных символов: Специальные символы нужно экранировать с помощью обратных слешей в строке формата
7. printf против echo
| Характеристика | printf | echo |
|---|---|---|
| Перевод строки | Необходимо явно добавить \n | Добавляется автоматически |
| Форматирование | Поддерживает сложное форматирование | Простой вывод |
| Согласованность | Единообразное поведение в разных системах | Может различаться в разных системах |
| Подстановка переменных | Должно быть указано явно | Автоматическая подстановка |
| Специальные символы | Требуется экранирование | Некоторые версии поддерживают опцию -e |