Printf format string linux

HuMan: printf

Команда printf выводит АРГУМЕНТ на стандартный вывод (как правило, экран дисплея), используя при этом определенный ФОРМАТ.

Эта команда была создана для замены всем знакомой команды echo (настолько древней, что даже имя ее автора не известно).

Возможности команды echo ограничены, кроме того, в разных ветках Unix’а оказались разные ее версии, что приводит к несовместимости.

Поэтому Posix рекомендует пользоваться командой printf.

Самое первое, что следует прояснить: по умолчанию команда printf не переводит строку по завершении. Это выглядит так:

Следующее приглашение командной строки находится на той же самой строке что и вывод предыдущей команды. Это очень неудобно, поэтому в ФОРМАТ приходится добавлять символ новой строки (\n):

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

Вот как выглядит команда printf в виде, полностью дублирующем команду echo:

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

Если нам нужно использовать команду printf для просмотра переменных окружения, то кавычки не нужны:

Если же мы возьмем аргумент в кавычки, то он будет воспринят просто как выражение и воспроизведен дословно:

Но довольно о замене команды echo, займемся непосредственно командой printf.

Представление аргумента

0N Восьмеричное число. Например 024.

0xN и 0XN Шестнадцатеричные числа. Например 0?41.

«А (обычные кавычки перед любой буквой) Интерпретируется как кодовый номер этой буквы в текущей кодировке. С кириллицей не работает.

‘А (одинарные кавычки перед любой буквой) Интерпретируется как кодовый номер этой буквы в текущей кодировке. С кириллицей не работает.

Форматы команды printf

ФОРМАТ пишется в командной строке непосредственно после самой команды и заключается в кавычки — двойные или одинарные. Собственно говоря, кавычки нужны не всегда, но лучше их ставить, во избежание недоразумений. Это полезная привычка. (А ведь большинство привычек — вредные).

%b Рассматривает аргумент как строку, при этом интерпретирует все управляющие символы, содержащиеся в ней.

%s Рассматривает аргумент как просто как строку.

%c Рассматривает аргумент как символ, при этом берется первый символ выражения или строки.

%q Преобразует строку к виду, пригодному к использованию в качестве ввода в шелл.

Здесь необходимы пояснения. Допустим, мы хотим напечатать на экране фразу

Ваш,
Алексей Дмитриев

Для этого дадим следующую команду:

А теперь вместо формата %b применим формат %q:

Кажется, произошла какая-то ошибка или сбой. Но это не так; подставим вывод команды в качестве аргумента команды printf ‘%b\n’ , но уже безо всяких дополнительных кавычек (все необходимые кавычки содержатся в выводе команды):

Читайте также:  Компьютер нету звука система windows 10

Больше того, этот же вывод можно использовать в качестве аргумента для других команд, скажем echo -e (опция -e позволяет команде echo интерпретировать специальные символы, в частности символ новой строки (\n):

Вот какой интересный формат %q! Однако продолжим.

Дальше идут всевозможные форматы представления чисел.

%i То же, что и предыдущее.

%o Представляет аргумент в виде не имеющего знака восьмеричного числа.

%x Представляет аргумент в виде не имеющего знака шестнадцатеричного числа. Буквы пишутся в нижнем регистре.

%X Представляет аргумент в виде не имеющего знака шестнадцатеричного числа, при этом буквы пишутся в верхнем регистре.

%f Интерпретирует аргумент как число с плавающей запятой.

%e Интерпретирует аргумент с удвоенной точностью (double precision), при этом выводит его в формате +/-e .

%E То же, что и предыдущее, только с заглавной буквой Е.

Вот и все форматы, я привел их для встроенной в bash команды printf.

Модификаторы форматов

(С кириллицей не работает).

Модификаторы:

# Альтернативный формат для чисел, см. ниже.

Выравнивание текста по левому краю (стандарно — по правому краю)

0 Дополняет числа нулями, а не пробелами. Применяется при заданной ширине колонки (в примере 50). Пример:

space Дополняет положительные числа пробелами, а отрицательные знаками «минус» (-).

+ Пишет все числа со знаками плюс или минус.

Альтернативный формат для чисел

%#x, %#X Шестнадцатеричные числа пишутся с 0х или 0Х впереди, если они сами не нулевые:

%#g, %#G Числа с плавающей запятой пишутся с последующими нулями, в количестве, определяемом данным разрешением. Обычно последующие нули не пишутся:

%# со всеми числовыми форматами, кроме d, o, x, X Всегда ставит десятичную запятую, даже если знаков после запятой нет:

Точность разрешения

Внимание: не прозевайте точку в записи формата!

Можно вместо числа знаков поставить астериск, тогда количество знаков ставится перед самим аргументом:

Для строк точность разрешения определяет максимальное число выводимых символов (максимальную ширину колонки текста).

Для целых чисел — задает число выводимых знаков (добавляет нули).

Управляющие символы языка Си, работающие с командой printf

\NNN Символ с восьмеричным значением NNN (от 1 до 3 цифр)

\a Звуковой сигнал

\c Не производить дальнейшую обработку данных

\f Перевод страницы

\r Возврат каретки

\v Вертикальная табуляция

\xHH Символ с шестнадцатеричным кодом HH (1 или 2 цифры)

\uHHHH Символ Unicode (ISO/IEC 10646) с шестнадцатеричным кодом HHHH (4 цифры)

\UHHHHHHHH Символ Unicode с шестнадцатеричным кодом HHHHHHHH (8 цифр)

Еще несколько примеров

2. Вывести десятичное число в восьмеричной форме:

3. Узнать кодовый номер буквы А (англ):

4. Пример, могущий служить домашним заданием:

Кто понял, в чем тут дело, сообщите мне, пожалуйста. Я лично не понял.

Опции команды printf

Опция -v ПЕРЕМЕННАЯ_ОКРУЖЕНИЯ

Хорошо, что в начале статьи я привел пример, в котором была записана моя $PATH, поэтому смог восстановить.

Опции —help и —version общеизвестны и рассмотрены не будут.

Примечание:

Резюме команды printf

Должен предупредить, что собрал в этой статье все, что сумел «нарыть» по поводу всех версий этой команды. Поэтому некоторые варианты могут не срабатывать в ваших версиях.

Источник

Linux printf command

On Unix-like operating systems, the printf command inserts arguments into a user-defined string of text, creating formatted output.

Читайте также:  Эффективность защитника windows 10

This page covers the GNU/Linux version of printf.

Description

printf prints a formatted string to the standard output. Its roots are in the C programming language, which uses a function by the same name. It is a handy way to produce precisely-formatted output from numerical or textual arguments.

Syntax

Options

FORMAT FORMAT controls the output, and defines the way that the ARGUMENTs will be expressed in the output. See the Format section, below.
ARGUMENT Each ARGUMENT will be inserted into the formatted output according to the definition of FORMAT.
—help Display a help message, and exit.
—version Display version information, and exit.

Format

The FORMAT string contains three types of objects:

  • ordinary characters, which are copied verbatim to the output.
  • interpreted character sequences, which are escaped with a backslash («\«).
  • conversion specifications, which define the way the ARGUMENTs will be expressed as part of the output.

Here is a quick example which uses these three types of objects:

This command produces the output:

Here, FORMAT is enclosed in double-quotes («). There is one conversion specification: %s, which interprets the argument «John» as a string and inserts it into the output. There are three escaped character sequences: two occurrences of and one occurrence of \n. The sequence translates as a literal double-quote; it is escaped with a backslash so that printf knows to treat it as a literal character, and not as the end of the FORMAT string. \n is the sequence for a newline character, and tells printf to begin a new line and continue the output from there.

The power of printf lies in the fact that for any given FORMAT string, the ARGUMENTs can be changed to affect the output. For example, the output of the command in the above example can be altered by changing the argument, «John». If used in a script, this argument can be set to a variable. For instance, the command

. will insert the value of the environment variable $LOGNAME, which is the username of whoever ran the command.

Conversion specifications

Each conversion specification begins with a % and ends with a conversion character. Between the % and the conversion character there may be, in order:

A minus sign. This tells printf to left-adjust the conversion of the argument.
number An integer that specifies field width; printf prints a conversion of ARGUMENT in a field at least number characters wide. If necessary it will be padded on the left (or right, if left-adjustment is called for) to make up the field width.
. A period, which separates the field width from the precision.
number An integer, the precision, which specifies the maximum number of characters to be printed from a string, or the number of digits after the decimal point of a floating-point value, or the minimum number of digits for an integer.
h or l These differentiate between a short and a long integer, respectively, and are generally only needed for computer programming.
Читайте также:  Libreoffice для windows 10 x64

The conversion characters themselves, which tell printf what kind of argument to expect, are as follows:

conversion character argument type
d, i An integer, expressed as a decimal number.
o An integer, expressed as an unsigned octal number.
x, X An integer, expressed as an unsigned hexadecimal number
u An integer, expressed as an unsigned decimal number.
c An integer, expressed as a character. The integer corresponds to the character’s ASCII code.
s A string.
f A floating-point number, with a default precision of 6.
e, E A floating-point number expressed in scientific notation, with a default precision of 6.
p A memory address pointer.
% No conversion; a literal percent sign («%«) is printed instead.

A width or precision may be represented with an asterisk («*«); if so, the asterisk reads in an argument, which must be an integer, and uses that value. For example,

. produces the following output:

The following table represents the way that printf would output its ARGUMENT, «computerhope«, using various FORMAT strings. Each string is enclosed in quotes so that it’s easier to see the exact extent of each:

FORMAT string ARGUMENT string output string
«%s» «computerhope»
«%8s» «computerhope»
«%.8s» «computerhope»
«%-8s» «computerhope»
«%-15s» «computerhope»
«%15.8s» «computerhope»
«%-15.8» «computerhope»
«%-15.2» «computerhope»

Please note that printf requires the number of conversion strings to match the number of ARGUMENTs; it maps them one-to-one, and expects to find exactly one ARGUMENT for each conversion string. The only exception is a conversion string which uses an asterisk; such strings require two arguments each.

Conversion strings are always interpreted from left to right. For example, the following printf command:

. produces the following output:

Interpreted escaped character sequences

The following character sequences are interpreted as special characters by printf:

prints a double-quote («)
\\ prints a backslash (\)
\a issues an alert (plays a bell)
\b prints a backspace
\c instructs printf to produce no further output
\e prints an escape character (ASCII code 27)
\f prints a form feed
\n prints a newline
\r prints a carriage return
\t prints a horizontal tab
\v prints a vertical tab
\NNN prints a byte with octal value NNN (1 to 3 digits)
\xHH prints a byte with hexadecimal value HH (1 to 2 digits)
\uHHHH prints the unicode character with hexadecimal value HHHH (4 digits)
\UHHHHHHHH prints the unicode character with hexadecimal value HHHHHHHH (8 digits)
%b prints ARGUMENT as a string with «\» escapes interpreted as listed above, with the exception that octal escapes take the form \0 or \0NN

Quoting in the shell

Be careful with the way your shell interprets quoted strings. If your shell is not interpreting your quoted string correctly, try using single-quotes rather than double-quotes.

Examples

Prints the following output:

Prints the same output as the above example.

Prints a string telling you the location of your home directory.

awk — Interpreter for the AWK text processing programming language.
bc — A calculator.
echo — Output text.

Источник

Оцените статью