501 Nоt Imрlеmеntеd - хмм, так я ещё никогда не пробовала.

5 мин для чтенияКоманда printf. Оболочка Bash в Linux

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
1 июня 2020
Команда printf. Оболочка Bash в Linux
Как правило, при написании сценариев bash мы используем echo для печати стандартный вывод. echo это простая команда, но ее возможности ограничены.
Чтобы лучше контролировать форматирование вывода, используйте команду printf.

Команда printf форматирует и печатает свои аргументы, аналогично функции printf() в C.

 

Команда printf

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 выглядит так:

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-символов:

  • \\ – Отображает символ обратной косой черты.
  • \b – Отображает символ возврата на одну позицию.
  • \n – Отображает новую строку.
  • \r – Отображает возврат каретки.
  • \t – Отображает горизонтальную вкладку.
  • \v – Отображает вертикальную вкладку.

 

Конверсионные характеристики

Спецификация преобразования принимает следующую форму:

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

 

Каждая спецификация преобразования звезды с знаком процента (%), включает в себя дополнительные модификаторы и заканчивается одним из следующих букв, которые представляют собой тип данных (specifier) соответствующего аргумента: aAbcdeEfgGioqsuxX.

 

Спецификатор преобразования типа

Преобразование типа specifier – это символ, который определяет, как интерпретировать соответствующий аргумент. Этот символ обязателен, и он помещается после необязательных полей.

Ниже приведен список, показывающий все преобразования типов и то, что они делают:

  • %b – Распечатайте аргумент, расширяя escape – последовательности обратной косой черты.
  • %q – Вывести аргумент в кавычках, многократно используемый в качестве ввода.
  • %d, %i- Печать аргумента как десятичное целое.
  • %u – Вывести аргумент в виде десятичного целого числа без знака.
  • %o – Вывести аргумент в виде восьмеричного целого без знака.
  • %x, %X – Вывести аргумент в виде шестнадцатеричного целого числа без знака. %x печатает строчные буквы и %X печатает прописные.
  • %e, %E – Вывести аргумент в виде числа с плавающей запятой в экспоненциальной записи. %e печатает строчные буквы и %E печатает прописные.
  • %a, %A – Вывести аргумент в виде числа с плавающей запятой в шестнадцатеричной дробной записи. %a печатает строчные буквы и %A печатает прописные.
  • %g, %G – Вывести аргумент в виде числа с плавающей точкой в обычной или экспоненциальной записи, в зависимости от того, что больше подходит для данного значения и точности. %g печатает строчные буквы и %G печатает прописные.
  • %c – Распечатать аргумент в виде одного символа.
  • %f – Распечатайте аргумент как число с плавающей точкой.
  • %s – Распечатать аргумент в виде строки.
  • %% – Напечатайте буквальный символ %.

Число без знака представляет ноль и положительные числа, а число со знаком представляет отрицательные, ноль и положительные числа.

Следующая команда печатает число 100 в трех разных системах счисления:

printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
Decimal: 100
Hex: 64
Octal: 144

 

Флаги директивы

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

Вот самые распространенные из них:

  • — Выровнять напечатанный текст по полю слева. По умолчанию текст выравнивается по правому краю.
  • +- Префикс номера со знаком +или -. По умолчанию только отрицательные числа имеют префикс со знаком минус.
  • 0 – Числа дополняются нулями, а не пробелами.
  • blank – Префикс положительных чисел с пробелом и отрицательных чисел с минусом ( -).
  • #- Альтернативный формат для чисел.

 

Директива ширины

Указанная директива width помещается после любых символов флага и определяет минимальное количество символов, которое должно привести к преобразованию.

Если ширина выводимого текста меньше указанной ширины, он дополняется пробелами. Ширина может быть указана как неотрицательное десятичное целое число или звездочка ( *).

Вот пример:

printf "%20s %d\n" Mark 305

 

%20s означает установить поле длиной не менее 20 символов. Пробелы добавляются перед текстом, потому что по умолчанию вывод выровнен по правому краю. Чтобы выровнять текст по левому краю, используйте флаг (%-20s).

      Mark 305

 

Когда звездочка ( *) используется в качестве директивы width, тогда ширина поля преобразования устанавливается аргументом ширины, который предшествует форматируемому аргументу.

В приведенном ниже примере мы устанавливаем ширину 10:

printf "%0*d" 10 5

 

0 – это флаг, который дополняет число начальными нулями вместо пробелов. Выходной текст будет содержать не менее 10 символов:

0000000005

 

Директива точности

Модификатор .precision состоит из точки (.) с последующей положительным целым числом или звездочкой (*), которые в зависимости от типа спецификатора, задает число строк или цифровых символов или количество знаков после запятой для печати.

Точность имеет следующий эффект:

  • Если тип преобразования является целым числом, точность определяет минимальное количество цифр для печати. Если количество цифр в аргументе меньше точности, выводятся начальные нули.
  • Если тип преобразования является плавающей точкой, точность указывает количество цифр, следующих за символом десятичной запятой. Точность по умолчанию – 6.
  • Если тип преобразования является строкой, точность определяет максимальное количество символов для печати. Если количество символов в аргументе превышает точность, лишние символы усекаются.

Вот пример, показывающий, как округлить число с плавающей запятой до 3 десятичных знаков:

printf "%.3f" 1.61803398
1.618

 

Когда для точности задана звездочка ( *), ее значение задается аргументом точности, который предшествует форматируемому аргументу.

printf "%.*f" 3 1.61803398
1.618

 

Вывод

Команда printf принимает формат и аргументы и печатает форматированный текст.

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

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

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

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

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

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

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

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

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

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

close
galka

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

close