]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.bin/printf/printf.1
MFV: file 5.45.
[FreeBSD/FreeBSD.git] / usr.bin / printf / printf.1
1 .\" Copyright (c) 1989, 1990, 1993
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" This code is derived from software contributed to Berkeley by
5 .\" the Institute of Electrical and Electronics Engineers, Inc.
6 .\"
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
9 .\" are met:
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\"    notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in the
14 .\"    documentation and/or other materials provided with the distribution.
15 .\" 3. Neither the name of the University nor the names of its contributors
16 .\"    may be used to endorse or promote products derived from this software
17 .\"    without specific prior written permission.
18 .\"
19 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 .\" SUCH DAMAGE.
30 .\"
31 .\"     @(#)printf.1    8.1 (Berkeley) 6/6/93
32 .\"
33 .Dd July 1, 2020
34 .Dt PRINTF 1
35 .Os
36 .Sh NAME
37 .Nm printf
38 .Nd formatted output
39 .Sh SYNOPSIS
40 .Nm
41 .Ar format Op Ar arguments ...
42 .Sh DESCRIPTION
43 The
44 .Nm
45 utility formats and prints its arguments, after the first, under control
46 of the
47 .Ar format .
48 The
49 .Ar format
50 is a character string which contains three types of objects: plain characters,
51 which are simply copied to standard output, character escape sequences which
52 are converted and copied to the standard output, and format specifications,
53 each of which causes printing of the next successive
54 .Ar argument .
55 .Pp
56 The
57 .Ar arguments
58 after the first are treated as strings if the corresponding format is
59 either
60 .Cm c , b
61 or
62 .Cm s ;
63 otherwise it is evaluated as a C constant, with the following extensions:
64 .Pp
65 .Bl -bullet -offset indent -compact
66 .It
67 A leading plus or minus sign is allowed.
68 .It
69 If the leading character is a single or double quote, the value is the
70 character code of the next character.
71 .El
72 .Pp
73 The format string is reused as often as necessary to satisfy the
74 .Ar arguments .
75 Any extra format specifications are evaluated with zero or the null
76 string.
77 .Pp
78 Character escape sequences are in backslash notation as defined in the
79 .St -ansiC ,
80 with extensions.
81 The characters and their meanings
82 are as follows:
83 .Pp
84 .Bl -tag -width Ds -offset indent -compact
85 .It Cm \ea
86 Write a <bell> character.
87 .It Cm \eb
88 Write a <backspace> character.
89 .It Cm \ef
90 Write a <form-feed> character.
91 .It Cm \en
92 Write a <new-line> character.
93 .It Cm \er
94 Write a <carriage return> character.
95 .It Cm \et
96 Write a <tab> character.
97 .It Cm \ev
98 Write a <vertical tab> character.
99 .It Cm \e\'
100 Write a <single quote> character.
101 .It Cm \e\e
102 Write a backslash character.
103 .It Cm \e Ns Ar num
104 Write a byte whose
105 value is the 1-, 2-, or 3-digit
106 octal number
107 .Ar num .
108 Multibyte characters can be constructed using multiple
109 .Cm \e Ns Ar num
110 sequences.
111 .El
112 .Pp
113 Each format specification is introduced by the percent character
114 (``%'').
115 The remainder of the format specification includes,
116 in the following order:
117 .Bl -tag -width Ds
118 .It "Zero or more of the following flags:"
119 .Bl -tag -width Ds
120 .It Cm #
121 A `#' character
122 specifying that the value should be printed in an ``alternate form''.
123 For
124 .Cm b , c , d , s
125 and
126 .Cm u
127 formats, this option has no effect.
128 For the
129 .Cm o
130 formats the precision of the number is increased to force the first
131 character of the output string to a zero.
132 For the
133 .Cm x
134 .Pq Cm X
135 format, a non-zero result has the string
136 .Li 0x
137 .Pq Li 0X
138 prepended to it.
139 For
140 .Cm a , A , e , E , f , F , g
141 and
142 .Cm G
143 formats, the result will always contain a decimal point, even if no
144 digits follow the point (normally, a decimal point only appears in the
145 results of those formats if a digit follows the decimal point).
146 For
147 .Cm g
148 and
149 .Cm G
150 formats, trailing zeros are not removed from the result as they
151 would otherwise be;
152 .It Cm \&\-
153 A minus sign `\-' which specifies
154 .Em left adjustment
155 of the output in the indicated field;
156 .It Cm \&+
157 A `+' character specifying that there should always be
158 a sign placed before the number when using signed formats.
159 .It Sq \&\ \&
160 A space specifying that a blank should be left before a positive number
161 for a signed format.
162 A `+' overrides a space if both are used;
163 .It Cm \&0
164 A zero `0' character indicating that zero-padding should be used
165 rather than blank-padding.
166 A `\-' overrides a `0' if both are used;
167 .El
168 .It "Field Width:"
169 An optional digit string specifying a
170 .Em field width ;
171 if the output string has fewer bytes than the field width it will
172 be blank-padded on the left (or right, if the left-adjustment indicator
173 has been given) to make up the field width (note that a leading zero
174 is a flag, but an embedded zero is part of a field width);
175 .It Precision:
176 An optional period,
177 .Sq Cm \&.\& ,
178 followed by an optional digit string giving a
179 .Em precision
180 which specifies the number of digits to appear after the decimal point,
181 for
182 .Cm e
183 and
184 .Cm f
185 formats, or the maximum number of bytes to be printed
186 from a string; if the digit string is missing, the precision is treated
187 as zero;
188 .It Format:
189 A character which indicates the type of format to use (one of
190 .Cm diouxXfFeEgGaAcsb ) .
191 The uppercase formats differ from their lowercase counterparts only in
192 that the output of the former is entirely in uppercase.
193 The floating-point format specifiers
194 .Pq Cm fFeEgGaA
195 may be prefixed by an
196 .Cm L
197 to request that additional precision be used, if available.
198 .El
199 .Pp
200 A field width or precision may be
201 .Sq Cm \&*
202 instead of a digit string.
203 In this case an
204 .Ar argument
205 supplies the field width or precision.
206 .Pp
207 The format characters and their meanings are:
208 .Bl -tag -width Fl
209 .It Cm diouXx
210 The
211 .Ar argument
212 is printed as a signed decimal (d or i), unsigned octal, unsigned decimal,
213 or unsigned hexadecimal (X or x), respectively.
214 .It Cm fF
215 The
216 .Ar argument
217 is printed in the style `[\-]ddd.ddd' where the number of d's
218 after the decimal point is equal to the precision specification for
219 the argument.
220 If the precision is missing, 6 digits are given; if the precision
221 is explicitly 0, no digits and no decimal point are printed.
222 The values \*[If] and \*[Na] are printed as
223 .Ql inf
224 and
225 .Ql nan ,
226 respectively.
227 .It Cm eE
228 The
229 .Ar argument
230 is printed in the style
231 .Cm e
232 .Sm off
233 .Sq Op - Ar d.ddd No \(+- Ar dd
234 .Sm on
235 where there
236 is one digit before the decimal point and the number after is equal to
237 the precision specification for the argument; when the precision is
238 missing, 6 digits are produced.
239 The values \*[If] and \*[Na] are printed as
240 .Ql inf
241 and
242 .Ql nan ,
243 respectively.
244 .It Cm gG
245 The
246 .Ar argument
247 is printed in style
248 .Cm f
249 .Pq Cm F
250 or in style
251 .Cm e
252 .Pq Cm E
253 whichever gives full precision in minimum space.
254 .It Cm aA
255 The
256 .Ar argument
257 is printed in style
258 .Sm off
259 .Sq Op - Ar h.hhh No \(+- Li p Ar d
260 .Sm on
261 where there is one digit before the hexadecimal point and the number
262 after is equal to the precision specification for the argument;
263 when the precision is missing, enough digits are produced to convey
264 the argument's exact double-precision floating-point representation.
265 The values \*[If] and \*[Na] are printed as
266 .Ql inf
267 and
268 .Ql nan ,
269 respectively.
270 .It Cm c
271 The first byte of
272 .Ar argument
273 is printed.
274 .It Cm s
275 Bytes from the string
276 .Ar argument
277 are printed until the end is reached or until the number of bytes
278 indicated by the precision specification is reached; however if the
279 precision is 0 or missing, the string is printed entirely.
280 .It Cm b
281 As for
282 .Cm s ,
283 but interpret character escapes in backslash notation in the string
284 .Ar argument .
285 The permitted escape sequences are slightly different in that
286 octal escapes are
287 .Cm \e0 Ns Ar num
288 instead of
289 .Cm \e Ns Ar num
290 and that an additional escape sequence
291 .Cm \ec
292 stops further output from this
293 .Nm
294 invocation.
295 .It Cm n$
296 Allows reordering of the output according to
297 .Ar argument .
298 .It Cm \&%
299 Print a `%'; no argument is used.
300 .El
301 .Pp
302 The decimal point
303 character is defined in the program's locale (category
304 .Dv LC_NUMERIC ) .
305 .Pp
306 In no case does a non-existent or small field width cause truncation of
307 a field; padding takes place only if the specified field width exceeds
308 the actual width.
309 .Pp
310 Some shells may provide a builtin
311 .Nm
312 command which is similar or identical to this utility.
313 Consult the
314 .Xr builtin 1
315 manual page.
316 .Sh EXIT STATUS
317 .Ex -std
318 .Sh EXAMPLES
319 Print the string
320 .Qq hello :
321 .Bd -literal -offset indent
322 $ printf "%s\en" hello
323 hello
324 .Ed
325 .Pp
326 Same as above, but notice that the format string is not quoted and hence we
327 do not get the expected behavior:
328 .Bd -literal -offset indent
329 $ printf %s\en hello
330 hellon$
331 .Ed
332 .Pp
333 Print arguments forcing sign only for the first argument:
334 .Bd -literal -offset indent
335 $ printf "%+d\en%d\en%d\en" 1 -2 13
336 +1
337 -2
338 13
339 .Ed
340 .Pp
341 Same as above, but the single format string will be applied to the three
342 arguments:
343 .Bd -literal -offset indent
344 $ printf "%+d\en" 1 -2 13
345 +1
346 -2
347 +13
348 .Ed
349 .Pp
350 Print number using only two digits after the decimal point:
351 .Bd -literal -offset indent
352 $ printf "%.2f\en" 31.7456
353 31.75
354 .Ed
355 .Sh COMPATIBILITY
356 The traditional
357 .Bx
358 behavior of converting arguments of numeric formats not beginning
359 with a digit to the ASCII
360 code of the first character is not supported.
361 .Sh SEE ALSO
362 .Xr builtin 1 ,
363 .Xr echo 1 ,
364 .Xr sh 1 ,
365 .Xr printf 3
366 .Sh STANDARDS
367 The
368 .Nm
369 command is expected to be compatible with the
370 .St -p1003.2
371 specification.
372 .Sh HISTORY
373 The
374 .Nm
375 command appeared in
376 .Bx 4.3 Reno .
377 It is modeled
378 after the standard library function,
379 .Xr printf 3 .
380 .Sh CAVEATS
381 ANSI hexadecimal character constants were deliberately not provided.
382 .Pp
383 Trying to print a dash ("-") as the first character causes
384 .Nm
385 to interpret the dash as a program argument.
386 .Nm --
387 must be used before
388 .Ar format .
389 .Pp
390 If the locale contains multibyte characters
391 (such as UTF-8),
392 the
393 .Cm c
394 format and
395 .Cm b
396 and
397 .Cm s
398 formats with a precision
399 may not operate as expected.
400 .Sh BUGS
401 Since the floating point numbers are translated from ASCII
402 to floating-point and then back again, floating-point precision may be lost.
403 (By default, the number is translated to an IEEE-754 double-precision
404 value before being printed.
405 The
406 .Cm L
407 modifier may produce additional precision, depending on the hardware platform.)
408 .Pp
409 The escape sequence \e000 is the string terminator.
410 When present in the argument for the
411 .Cm b
412 format, the argument will be truncated at the \e000 character.
413 .Pp
414 Multibyte characters are not recognized in format strings (this is only
415 a problem if
416 .Ql %
417 can appear inside a multibyte character).