PRINTF(1) | General Commands Manual | PRINTF(1) |
printf
— formatted
output
printf |
format [argument ...] |
printf
formats and prints its arguments,
after the first, under control of the format. The
format is a character string which contains three
types of objects: plain characters, which are simply copied to standard
output, character escape sequences which are converted and copied to the
standard output, and format specifications, each of which causes printing of
the next successive argument.
The arguments after the first are treated as strings if the
corresponding format is b
, c
or s
; otherwise it is evaluated as a C constant,
with the following extensions:
The format string is reused as often as necessary to satisfy the arguments. Any extra format specifications are evaluated with zero or the null string.
Character escape sequences are in backslash notation as defined in ANSI X3.159-1989 (“ANSI C89”). The characters and their meanings are as follows:
\a
\b
\e
\f
\n
\r
\t
\v
\´
\\
\
numEach format specification is introduced by the percent (‘%’) character. The remainder of the format specifiers include, in the following order:
#
o
format the precision
of the number is increased to force the first character of the output
string to a zero. For the x
(X
) format, a non-zero result has the string
0x
(0X
) prepended to
it. For a
, A
,
e
, E
,
f
, F
,
g
, and G
formats, the
result will always contain a decimal point, even if no digits follow
the point (normally, a decimal point only appears in the results of
those formats if a digit follows the decimal point). For
g
and G
formats,
trailing zeros are not removed from the result as they would otherwise
be. For all other formats, behaviour is undefined.-
+
+
’
overrides a space if both are used.0
d
,
i
, o
,
u
, or x
(X
) formats. A
‘-
’ overrides a
‘0
’ if both are used.e
and f
formats, or
the maximum number of bytes to be printed from a string; if the digit
string is missing, the precision is treated as zero.diouxXfFeEgGaAbcs
).A field width or precision may be
‘*
’ instead of a digit string. In this
case an argument supplies the field width or
precision.
The format characters and their meanings are:
diouXx
d
or
i
), unsigned octal, unsigned decimal, or unsigned
hexadecimal (x
or
X
), respectively.fF
.
ddd where the
number of d's after the decimal point is equal to the precision
specification for the argument. If the precision is missing, 6 digits are
given; if the precision is explicitly 0, no digits and no decimal point
are printed.
If the argument is infinity, it will be converted to [-]inf
(f
) or [-]INF (F
),
respectively. If the argument is not-a-number (NaN), it will be
converted to [-]nan (f
) or [-]NAN
(F
), respectively.
eE
.
ddde
±dd
where there is one digit before the decimal point and the number after is
equal to the precision specification for the argument; when the precision
is missing, 6 digits are produced. An upper-case ‘E’ is used
for an E
format.
If the argument is infinity, it will be converted to [-]inf
(e
) or [-]INF (E
),
respectively. If the argument is not-a-number (NaN), it will be
converted to [-]nan (e
) or [-]NAN
(E
), respectively.
gG
f
or in style e
(E
) whichever gives full precision in minimum
space.
If the argument is infinity, it will be converted to [-]inf
(g
) or [-]INF (G
),
respectively. If the argument is not-a-number (NaN), it will be
converted to [-]nan (g
) or [-]NAN
(G
), respectively.
aA
.
hhhp
[±]d
where there is one digit before the hexadecimal point and the number after
is equal to the precision specification for the argument. When the
precision is missing, enough digits are produced to convey the argument's
exact double-precision floating-point representation.
If the argument is infinity, it will be converted to [-]inf
(a
) or [-]INF (A
),
respectively. If the argument is not-a-number (NaN), it will be
converted to [-]nan (a
) or [-]NAN
(A
), respectively.
b
\c
, this
escape sequence is discarded together with all remaining characters in
this argument, all further arguments, and all remaining characters in the
format string.c
s
%
%
’; no argument is
used.In no case does a non-existent or small field width cause truncation of a field; padding takes place only if the specified field width exceeds the actual width.
The printf
utility exits 0 on
success, and >0 if an error occurs.
Convert a hexadecimal value to decimal and print it out:
$ printf "%d\n"
0x20
Print the decimal representation of the character 'a' (see ascii(7)):
$ printf "%d\n"
\'a
The printf
utility is compliant with the
IEEE Std 1003.1-2008 (“POSIX.1”)
specification, but in order to produce predictable output it deliberately
ignores the locale(1) and
always operates as if LC_ALL
=C were set.
The escape sequences \e and \' are extensions to that specification.
The printf
command appeared in
4.3BSD-Reno.
It is important never to pass a string with user-supplied data as
a format without using ‘%s
’. An
attacker can put format specifiers in the string to mangle your stack,
leading to a possible security hole.
Always be sure to use the proper secure idiom:
printf "%s" "$STRING"
Since arguments are translated from ASCII to floating-point, and then back again, floating-point precision may be lost.
March 13, 2018 | OpenBSD-6.5 |