PRINTF(1) | General Commands Manual | PRINTF(1) |
printf
— formatted
output
printf |
[-L ] format
[argument ...] |
printf
formats and prints its
arguments, 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. Each argument is used
only once.
If the first character of format is a dash
(‘-
’), format
must (and always may) be preceded by a word consisting of two dashes
(‘-
-
’) to
prevent it from being interpreted as an option string. See
getopt(3).
The -L
option causes all floating point
values resulting from format conversions to be printed using
long double formats, rather than the default
double.
The arguments after the first are treated as
strings if the corresponding format is either b
,
B
, c
, or
s
; otherwise each 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
\'
\"
\\
\
num\x
XXEach format specification is introduced by the percent character
(‘%
’). To produce a literal percent
(‘%
’) in the output, write the percent
character twice: (‘%%
’). This is not a
format conversion, but a special escape sequence, and consumes no
arguments. The remainder of the format specification
includes, in the following order:
#
#
’ character specifying that
the value should be printed in an “alternative form”.
For b
, c
,
C
, d
, and
s
formats, this option has no effect. For the
o
format the precision of the number is
increased to cause the first character of the numeric output string to
be a zero. For the x
(X
) format, a non-zero result has the string
‘0x
’
(‘0X
’) prepended to it. For
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.-
+
+
’ or
‘-
’) placed before the number
when using signed formats;
’+
’
overrides a ⟨space⟩ if both are used;0
+
’,
‘-
’ or
‘
’), if included,
precedes the padding. Padding to the right of left adjusted fields
always uses spaces. A ‘-
’
overrides a ‘0
’ if both are
used;Specifying a flag more than once is not an error, but has no additional effect.
.
’), followed
by an optional digit string giving a
precision
which specifies the number of digits to appear after the decimal point,
for e
and f
formats, or
the maximum number of bytes to be printed from a string
(b
, B
, and
s
formats); if the digit string is missing, the
precision is treated as zero;diouxXfFeEgGaAbBcCs
).A field width or precision may be
‘*
’ instead of a digit string. In this
case the next argument, preceding the value to be
converted, supplies the field width or precision. It must be an unsigned
integer constant. If both the field width and precision are
‘*
’ then two
arguments are required, with the field width preceding
the precision, and the value to be converted following those.
The format characters and their meanings are:
diouXx
d
or i
),
unsigned octal (o
), unsigned decimal
(u
), or unsigned hexadecimal
(X
or x
).fF
-
]ddd.
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 number is Infinity, or
Not-a-Number, then ‘inf
’ or
‘nan
’ is printed for
f
format, and
‘INF
’ or
‘NAN
’ for F
format.eE
-
]d.
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, and upper-case for Infinity and NaN as
for F
format.gG
f
(F
) or in style
e
(E
) whichever gives full
precision in minimum space.aA
b
The following additional backslash-escape sequences are supported:
\c
printf
to ignore any remaining
characters in the string operand containing it, any remaining
operands, and any additional characters in the format operand.\0
num\^
c\^?
’).\M^
c\M^?
’).\M-
cB
\
c’,
‘\^
c’,
‘\M^
c’, or
‘\M-
c’ formats
described above.c
C
s
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.
If an argument required by a format string is present, but is not
in a format expected by the format string conversion, a warning will be
printed to standard error, identifying the argument by number (1 is the
first after the format string) and usually also by content. In such a case a
value will still be produced, and printed, and processing will continue, but
printf
will eventually exit with a failure
status.
The printf
utility exits 0 on
success, and >0 if an error occurs.
The printf
utility conforms to
IEEE Std 1003.1-2001 (“POSIX.1”).
Support for the floating point formats and
‘*
’ as a field width and precision are
optional in POSIX.
The behaviour of the %B
and
%C
formats and the \'
,
\"
, \e
,
\x
XX, and
\
[M
][-
|
^
]c
escape sequences are undefined in POSIX.
Since the floating point numbers are translated from ASCII to floating-point and then back again, floating-point precision may be lost.
Hexadecimal character constants given as escapes in strings are restricted to, and should be specified as, two hexadecimal characters. This is contrary to the ISO C standard but does guarantee detection of the end of the constant.
All formats which treat the argument as a
number first convert the argument from its external
representation as a character string to an internal numeric representation,
and then apply the format to the internal numeric representation, producing
another external character string representation. One might expect the
%c
format to do likewise, but in fact it does
not.
To convert a string representation of a decimal, octal, or
hexadecimal number into the corresponding character, using a portable
invocation, two nested printf
invocations may be
used, in which the inner invocation converts the input to an octal string,
and the outer invocation uses the octal string as part of a format. For
example, the following command outputs the character whose code is 0x0a,
which is a newline in ASCII:
printf "$(printf '\\%o'
0x0a)"
In this implementation of printf
it is
possible to achieve the same result using one invocation:
printf %C 0x0a
November 24, 2024 | NetBSD 10.99 |