Поиск по сайту:

Все мужчины одинаковы перед женщиной, которой они восхищаются (Б. Шоу).

Использование команды Bash printf для печати форматированных выходных данных5 мин для чтения

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
16 ноября 2020
Bash Heredoc
Самый простой способ печати из командной строки Linux – использовать команду echo.

echo "Value of var is $var"

 

Однако команда echo не подойдет, если вам нужно распечатать форматированный вывод.

Здесь вам поможет команда printf. Команда printf в bash работает как команда printf в языке программирования C/C ++.

printf "Моей собаки %s %d лет.\n" Бобик 9

 

Первый аргумент %sожидает строку, %dожидает десятичное целое число, как в C/C ++. Не волнуйтесь, если вы не знакомы с C/C ++.

Вам не нужно изучать его только для использования команды printf в ваших сценариях Bash. Позвольте мне показать вам несколько примеров команды printf в Bash.

 

Использование команды printf в Bash

Начнем сначала с синтаксиса.

printf format [arguments]

 

Здесь format- строка, которая определяет, как будут отображаться последующие значения.

В этом примере printf “Моей собаки %s %d лет.\n” Бобик 9, «Моей собаки %s %d лет. \n» – это формат, за которым следуют аргументы Бобик и 9. Аргументы используются для замены спецификаторов формата (% s,% d и т. д.), Которые мы объясним позже в этой статье.

В простейшей форме printf можно использовать как команду echo для отображения строки.

printf "Hello World\n"

 

Обратите внимание на символ новой строки \n в конце? Разница между командами echo и PRINTF является то, что echo автоматически добавляет символ новой строки в конце, но для Printf, вы должны явно добавить.

 

Обратите особое внимание на тип и количество аргументов

Имейте в виду, что строка формата пытается применяться ко всем аргументам. Поэтому на него стоит обратить особое внимание.

Maximus@andreyex:~$ printf "Привет, %s! \n" Maximus Бобик
Привет, Maximus! 
Привет, Бобик!

 

Точно так же вы должны обратить внимание на тип спецификатора формата, который он ожидает в строке формата.

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

printf "Привет %s, ваша будка номер %d. \n" Maximus Бобик 131
bash: printf: Бобик: invalid number
Привет Maximus, ваша будка номер 0. 
Привет 131, ваша будка номер 0.

 

Здесь он принимает Maximus Бобик как первый набор аргументов, так и 131 второй набор аргументов.

Читать  5 команд для просмотра содержимого файла в командной строке Linux

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

Точно так же он видит 131 как строку во втором наборе аргументов, а поскольку второй аргумент отсутствует, по умолчанию он равен 0.

 

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

Для отображения вывода в желаемом формате доступно несколько спецификаторов формата. Вот некоторые из самых распространенных:

символ Применение
%s Строка
%c Одиночный персонаж
%d Целые числа
%o Восьмеричные целые числа
%x Шестнадцатеричные целые числа
%f Плавающая точка
%b Строка с escape-символом обратной косой черты
%% Знак процента

 

Теперь, когда вы знакомы со спецификатором формата, давайте рассмотрим еще несколько примеров, демонстрирующих их в действии.

 

Примеры команды printf в bash

Мы не думаем, что вам нужно подробное объяснение большинства этих примеров, поскольку они не требуют пояснений.

Maximus@andreyex:~$ printf "Восьмеричное значение %d is %o\n" 30 30
Восьмеричное значение 30 is 36

 

Давайте посмотрим, как использовать спецификатор %b для правильной интерпретации экранированного символа обратной косой черты.

Maximus@andreyex:~$ printf "Строка с обратной косой чертой: %s\n" "Hello\nWorld!"
Строка с обратной косой чертой: Hello\nWorld!

 

Как видите %s, это не имеет значения. Но %b с новой строкой escape-символ будет правильно интерпретирован:

Maximus@andreyex:~$ printf "Строка с обратной косой чертой: %b\n" "Hello\nWorld!"
Строка с обратной косой чертой: Hello
World!

 

Когда вы используете %c, он читает только символ за раз.

Maximus@andreyex:~$ printf "Символ: %c\n" a
Символ: a
Maximus@andreyex:~$ printf "Символ: %c\n" a b c
Символ: a
Символ: b
Символ: c
Maximus@andreyex:~$ printf "Символ: %c\n" abc
Символ: a

 

Использование модификаторов для отображения вывода printf в определенном стиле

Есть модификаторы, чтобы изменить внешний вид вывода по своему вкусу.

 

# модификатор для восьмеричных и шестнадцатеричных чисел

Ранее вы видели использование %oдля преобразования десятичного числа в восьмеричное. Однако было не совсем ясно, что это восьмеричное число. Вы можете использовать #модификатор для отображения восьмеричных и шестнадцатеричных чисел в правильном формате.

Maximus@andreyex:~$ printf "%d is %#o в восьмеричном и %#x в шестнадцатеричном формате\n" 30 30 30
30 is 036 в восьмеричном и 0x1e в шестнадцатеричном формате

 

Модификатор пробела для положительных целых чисел

Вы можете использовать пробел между %и d внутри %d для отображения положительного целого числа с начальным пробелом. Это помогает, когда у вас есть столбец положительных и отрицательных чисел. Посмотрите, какой из них выглядит более симпатичнее:

Maximus@andreyex:~$ printf "%d \n%d \n%d \n" 10 -10 10
10 
-10 
10 
Maximus@andreyex:~$ printf "% d \n%d \n% d \n" 10 -10 10
 10 
-10 
 10 

 

Читать  Как отобразить определенные строки файла в командной строке Linux

Модификатор ширины

Модификатор ширины – это целое число, указывающее минимальную ширину поля аргумента.

По умолчанию он выровнен по правому краю:

Maximus@andreyex:~$ printf "%10s| %5d\n" Age 23
       Age|    23

 

Вы можете выровнять его по левому краю, добавив -к нему флаг:

Maximus@andreyex:~$ printf "%-10s| %-5d\n" Age 23
Age       | 23

 

Модификатор точности

Вы можете использовать прецизионный модификатор (.) Точки , чтобы определить минимальное количество цифр , которое будет отображаться с %d, %u, %o, %x. Он добавляет нулевое заполнение слева от значения.

Maximus@andreyex:~$ printf "Roll Number: %.5d\n" 23
Roll Number: 00023

 

Если вы используете модификатор точности со строкой, он указывает максимальную длину строки. Если строка длиннее, на дисплее она обрезается.

Maximus@andreyex:~$ printf "Имя: %.4s\n" Maximus
Имя: Alex

 

Вы можете комбинировать модификатор ширины и точности:

Maximus@andreyex:~$ printf "Имя: %.4s\n" Maximus
Имя: Alex
Maximus@andreyex:~$ printf "Имя: %10.4s\n" Maximus
Имя:       Alex

 

Бонусный пример: отображение вывода в табличном формате с помощью printf

Давайте применим то, что вы узнали о команде printf, на более сложном примере. Это продемонстрирует истинный потенциал команды printf в сценариях bash.

Давайте воспользуемся командой printf, чтобы распечатать следующую таблицу с помощью bash:

Имя ID Возраст Оценки
Sherlock Holmes 0000122 23 A
James Bond 0000007 27 F
Hercules Poirot 0006811 59 G
Jane Marple 1234567 71 C

 

Вот сценарий оболочки, который мы написали для этой задачи. Ваш сценарий может отличаться:

#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %c\n"
TableWidth=37

printf "%-15s| %-7s| %.3s| %s\n" Name ID Age Grades
printf "%.${TableWidth}s\n" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C

 

Разве не чудесно использовать команду printf в bash для печати красиво отформатированного вывода для ваших сценариев?

Надеюсь, вам понравилось это подробное руководство по команде printf в Linux. Если у вас есть вопросы или предложения, дайте мне знать.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читайте также

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close
Яндекс.Метрика