Команда printf форматирует и печатает свои аргументы, аналогично функции printf() в C.
printf это оболочка, встроенная в Bash и другие популярные оболочки, такие как Zsh и Ksh. Существует также автономный двоичный файл /usr/bin/printf, но встроенная версия оболочки имеет преимущество. Мы рассмотрим встроенную версию Bash printf.
Синтаксис команды printf следующий:
printf [-v var] format [arguments]
Опция -v – указывает printf не печатать выход , но и присвоить его переменной.
format – строка, которая может содержать три различных типа объектов:
Команда принимает любое количество arguments. Если в arguments указано больше, чем спецификаторы формата, строка format используется повторно для использования всех аргументов. Если в arguments указано меньше спецификаторов формата, дополнительные спецификаторы числового формата устанавливаются в нулевое значение, а спецификаторы строкового формата – в нулевую строку.
Ниже приведены несколько моментов, которые следует учитывать при передаче аргументов команде printf:
Типичный пример использования printf выглядит так:
printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
Open issues: 34 Closed issues: 65
Строка Open issues: %s\nClosed issues: %s\n – это format, «34» и «65» являются аргументами. Строка формата содержит два символа новой строки (\n) и два спецификатора формата (%s), которые заменяются аргументами.
Команда printf не добавляет символ новой строки ( \n) в конце строки.
Символы с обратной косой чертой интерпретируются при использовании в строке формата или в аргументе, соответствующем спецификатору преобразования %b. Вот список наиболее распространенных escape-символов:
Спецификация преобразования принимает следующую форму:
%[flags][width][.precision]specifier
Каждая спецификация преобразования звезды с знаком процента (%), включает в себя дополнительные модификаторы и заканчивается одним из следующих букв, которые представляют собой тип данных (specifier) соответствующего аргумента: aAbcdeEfgGioqsuxX.
Преобразование типа specifier – это символ, который определяет, как интерпретировать соответствующий аргумент. Этот символ обязателен, и он помещается после необязательных полей.
Ниже приведен список, показывающий все преобразования типов и то, что они делают:
Число без знака представляет ноль и положительные числа, а число со знаком представляет отрицательные, ноль и положительные числа.
Следующая команда печатает число 100 в трех разных системах счисления:
printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
Decimal: 100 Hex: 64 Octal: 144
Флаги являются первыми необязательными модификаторами и используются для установки выравнивания, начальных нулей, префиксов и т. д.
Вот самые распространенные из них:
Указанная директива width помещается после любых символов флага и определяет минимальное количество символов, которое должно привести к преобразованию.
Если ширина выводимого текста меньше указанной ширины, он дополняется пробелами. Ширина может быть указана как неотрицательное десятичное целое число или звездочка ( *).
Вот пример:
printf "%20s %d\n" Mark 305
%20s означает установить поле длиной не менее 20 символов. Пробелы добавляются перед текстом, потому что по умолчанию вывод выровнен по правому краю. Чтобы выровнять текст по левому краю, используйте флаг (%-20s).
Mark 305
Когда звездочка ( *) используется в качестве директивы width, тогда ширина поля преобразования устанавливается аргументом ширины, который предшествует форматируемому аргументу.
В приведенном ниже примере мы устанавливаем ширину 10:
printf "%0*d" 10 5
0 – это флаг, который дополняет число начальными нулями вместо пробелов. Выходной текст будет содержать не менее 10 символов:
0000000005
Модификатор .precision состоит из точки (.) с последующей положительным целым числом или звездочкой (*), которые в зависимости от типа спецификатора, задает число строк или цифровых символов или количество знаков после запятой для печати.
Точность имеет следующий эффект:
Вот пример, показывающий, как округлить число с плавающей запятой до 3 десятичных знаков:
printf "%.3f" 1.61803398
1.618
Когда для точности задана звездочка ( *), ее значение задается аргументом точности, который предшествует форматируемому аргументу.
printf "%.*f" 3 1.61803398
1.618
Команда printf принимает формат и аргументы и печатает форматированный текст.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!
Спасибо! Ваша заявка принята
Спасибо! Ваша заявка принята