1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
|
PRINTF(1) User Commands PRINTF(1)
NNAAMMEE
printf - write formatted output
SSYYNNOOPPSSIISS
//uussrr//bbiinn//pprriinnttff
pprriinnttff _f_o_r_m_a_t [_a_r_g_u_m_e_n_t]...
kksshh9933
pprriinnttff _f_o_r_m_a_t [_s_t_r_i_n_g...]
DDEESSCCRRIIPPTTIIOONN
//uussrr//bbiinn//pprriinnttff
The pprriinnttff utility writes each string operand to standard output using
_f_o_r_m_a_t to control the output format.
OOPPEERRAANNDDSS
//uussrr//bbiinn//pprriinnttff
The following operands are supported by //uussrr//bbiinn//pprriinnttff:
_f_o_r_m_a_t
A string describing the format to use to write the
remaining operands. The _f_o_r_m_a_t operand is used as the
_f_o_r_m_a_t string described on the ffoorrmmaattss(7) manual page, with
the following exceptions:
o A SSPPAACCEE character in the format string, in any
context other than a flag of a conversion
specification, is treated as an ordinary
character that is copied to the output.
o A character in the format string is treated as a
character, not as a SSPPAACCEE character.
o In addition to the escape sequences described on
the ffoorrmmaattss(7) manual page (\\\\, \\aa, \\bb, \\ff, \\nn,
\\rr, \\tt, \\vv), \\_d_d_d, where _d_d_d is a one-, two- or
three-digit octal number, is written as a byte
with the numeric value specified by the octal
number.
o The program does not precede or follow output
from the dd or uu conversion specifications with
blank characters not specified by the _f_o_r_m_a_t
operand.
o The program does not precede output from the oo
conversion specification with zeros not
specified by the _f_o_r_m_a_t operand.
o The argument used for the conversion character
(or width or precision parameters, see below)
may be taken from the _nnth argument instead of
the next unused argument, by specifying _n$$
immediately following the %% character, or the **
character (for width or precision arguments).
If _n$$ appears in any conversions in the format
string, then it must be used for all
conversions, including any variable width or
precision specifiers.
o The special character ** may be used instead of a
string of decimal digits to indicate a minimum
field width or a precision. In this case the
next available argument is used (or the _nth if
the form _n$$ is used), treating its value as a
decimal string.
o An additional conversion character, bb, is
supported as follows. The argument is taken to
be a string that can contain backslash-escape
sequences. The following backslash-escape
sequences are supported:
o the escape sequences listed on the
ffoorrmmaattss(7) manual page (\\\\, \\aa, \\bb, \\ff, \\nn,
\\rr, \\tt, \\vv), which are converted to the
characters they represent
o \\00_d_d_d, where _d_d_d is a zero-, one-, two- or
three-digit octal number that is converted
to a byte with the numeric value specified
by the octal number
o \\cc, which is written and causes pprriinnttff to
ignore any remaining characters in the
string operand containing it, any remaining
string operands and any additional
characters in the _f_o_r_m_a_t operand.
The interpretation of a backslash followed by any other
sequence of characters is unspecified.
Bytes from the converted string are written until the end
of the string or the number of bytes indicated by the
precision specification is reached. If the precision is
omitted, it is taken to be infinite, so all bytes up to the
end of the converted string are written. For each
specification that consumes an argument, the next argument
operand is evaluated and converted to the appropriate type
for the conversion as specified below. The _f_o_r_m_a_t operand
is reused as often as necessary to satisfy the argument
operands. Any extra cc or ss conversion specifications are
evaluated as if a null string argument were supplied; other
extra conversion specifications are evaluated as if a zero
argument were supplied.
When there are more argument operands than format
specifiers, and the format includes _n$$ position indicators,
then the format is reprocessed from the beginning as above,
but with the argument list starting from the next argument
after the highest _nth argument previously encountered.
If the _f_o_r_m_a_t operand contains no conversion specifications
and _a_r_g_u_m_e_n_t operands are present, the results are
unspecified. If a character sequence in the _f_o_r_m_a_t operand
begins with a %% character, but does not form a valid
conversion specification, the behavior is unspecified.
_a_r_g_u_m_e_n_t
The strings to be written to standard output, under the
control of ffoorrmmaatt. The _a_r_g_u_m_e_n_t operands are treated as
strings if the corresponding conversion character is bb, cc
or ss. Otherwise, it is evaluated as a C constant, as
described by the ISO C standard, with the following
extensions:
o A leading plus or minus sign is allowed.
o If the leading character is a single- or double-
quote, the value is the numeric value in the
underlying codeset of the character following
the single- or double-quote.
If an argument operand cannot be completely converted into
an internal value appropriate to the corresponding
conversion specification, a diagnostic message is written
to standard error and the utility does not exit with a zero
exit status, but continues processing any remaining
operands and writes the value accumulated at the time the
error was detected to standard output.
kksshh9933
The _f_o_r_m_a_t operands support the full range of ANSI C/C99/XPG6
formatting specifiers as well as additional specifiers:
%%bb
Each character in the string operand is processed specially, as
follows:
\\aa
Alert character.
\\bb
Backspace character.
\\cc
Terminate output without appending NEWLINE. The remaining
string operands are ignored.
\\EE
Escape character (AASSCCIIII octal 003333).
\\ff
FORM FEED character.
\\nn
NEWLINE character.
\\tt
TAB character.
\\vv
Vertical tab character.
\\\\
Backslash character.
\\00_x
The 8-bit character whose AASSCCIIII code is the 11-, 22-, or
33-digit octal number _x.
%%BB
Treat the argument as a variable name and output the value
without converting it to a string. This is most useful for
variables of type --bb.
%%HH
Output string with characters <<, &&, >>, "", and non-printable
characters, properly escaped for use in HTML and XML documents.
%%PP
Treat _s_t_r_i_n_g as an extended regular expression and convert it to
a shell pattern.
%%qq
Output _s_t_r_i_n_g quoted in a manner that it can be read in by the
shell to get back the same string. However, empty strings
resulting from missing string operands are not quoted.
%%RR
Treat _s_t_r_i_n_g as an shell pattern expression and convert it to an
extended regular expression.
%%TT
Treat _s_t_r_i_n_g as a date/time string and format it. The TT can be
preceded by (_d_f_o_r_m_a_t), where _d_f_o_r_m_a_t is a date format as defined
by the ddaattee(1) command.
%%ZZ
Output a byte whose value is 00.
When performing conversions of _s_t_r_i_n_g to satisfy a numeric format
specifier, if the first character of _s_t_r_i_n_g is ""oorr'', the value is the
numeric value in the underlying code set of the character following the
""oorr''. Otherwise, _s_t_r_i_n_g is treated like a shell arithmetic expression
and evaluated.
If a _s_t_r_i_n_g operand cannot be completely converted into a value
appropriate for that format specifier, an error occurs, but remaining
_s_t_r_i_n_g operands continue to be processed.
In addition to the format specifier extensions, the following
extensions of ANSI C/C99/XPG6 are permitted in format specifiers:
o The escape sequences \\EE and \\ee expand to the escape
character which is octal 033 in ASCII.
o The escape sequence \\ccxx expands to CTRL-x.
o The escape sequence \\CC[[.._n_a_m_e..]] expands to the collating
element _n_a_m_e.
o The escape sequence \\xx{{hheexx}} expands to the character
corresponding to the hexadecimal value hheexx.
o The format modifier flag = can be used to center a field to
a specified width. When the output is a terminal, the
character width is used rather than the number of bytes.
o Each of the integral format specifiers can have a third
modifier after width and precision that specifies the base
of the conversion from 2 to 64. In this case, the ## modifier
causes _b_a_s_e## to be prepended to the value.
o The ## modifier can be used with the dd specifier when no base
is specified to cause the output to be written in units of
1000 with a suffix of one of kk MM GG TT PP EE.
o The ## modifier can be used with the ii specifier to cause the
output to be written in units of 11002244 with a suffix of one
of KKii MMii GGii TTii PPii EEii.
If there are more _s_t_r_i_n_g operands than format specifiers, the format
string is reprocessed from the beginning. If there are fewer _s_t_r_i_n_g
operands than format specifiers, then _s_t_r_i_n_g specifiers are treated as
if empty strings were supplied, numeric conversions are treated as if 00
was supplied, and time conversions are treated as if nnooww was supplied.
When there are more argument operands than format specifiers, and the
format includes _n$$ position indicators, then the format is reprocessed
from the beginning as above, but with the argument list starting from
the next argument after the highest _nth argument previously
encountered.
//uussrr//bbiinn//pprriinnttff is equivalent to kksshh9933's pprriinnttff built-in and pprriinntt --ff,
which allows additional options to be specified.
UUSSAAGGEE
//uussrr//bbiinn//pprriinnttff
The pprriinnttff utility, like the pprriinnttff(3C) function on which it is based,
makes no special provision for dealing with multi-byte characters when
using the %%cc conversion specification. Applications should be extremely
cautious using either of these features when there are multi-byte
characters in the character set.
The %%bb conversion specification is not part of the ISO C standard; it
has been added here as a portable way to process backslash escapes
expanded in string operands as provided by the eecchhoo utility. See also
the USAGE section of the eecchhoo(1) manual page for ways to use pprriinnttff as
a replacement for all of the traditional versions of the eecchhoo utility.
If an argument cannot be parsed correctly for the corresponding
conversion specification, the pprriinnttff utility reports an error. Thus,
overflow and extraneous characters at the end of an argument being used
for a numeric conversion are to be reported as errors.
It is not considered an error if an argument operand is not completely
used for a cc or ss conversion or if a string operand's first or second
character is used to get the numeric value of a character.
EEXXAAMMPPLLEESS
//uussrr//bbiinn//pprriinnttff
EExxaammppllee 11 Printing a Series of Prompts
The following example alerts the user, then prints and reads a series
of prompts:
example% pprriinnttff ""\\aaPPlleeaassee ffiillll iinn tthhee ffoolllloowwiinngg:: \\nnNNaammee:: ""
rreeaadd nnaammee
pprriinnttff ""PPhhoonnee nnuummbbeerr:: ""
rreeaadd pphhoonnee
EExxaammppllee 22 Printing a Table of Calculations
The following example prints a table of calculations. It reads out a
list of right and wrong answers from a file, calculates the percentage
correctly, and prints them out. The numbers are right-justified and
separated by a single tab character. The percentage is written to one
decimal place of accuracy:
example% wwhhiillee rreeaadd rriigghhtt wwrroonngg ;; ddoo
ppeerrcceenntt==$$((eecchhoo ""ssccaallee==11;;(($$rriigghhtt**110000))//(($$rriigghhtt++$$wwrroonngg))"" || bbcc))
pprriinnttff ""%%22dd rriigghhtt\\tt%%22dd wwrroonngg\\tt((%%ss%%%%))\\nn"" \\
$$rriigghhtt $$wwrroonngg $$ppeerrcceenntt
ddoonnee << ddaattaabbaassee__ffiillee
EExxaammppllee 33 Printing number strings
The command:
example% pprriinnttff ""%%55dd%%44dd\\nn"" 11 2211 332211 44332211 5544332211
produces:
1 21
3214321
54321 0
The _f_o_r_m_a_t operand is used three times to print all of the given
strings and that a 00 was supplied by pprriinnttff to satisfy the last %%44dd
conversion specification.
EExxaammppllee 44 Tabulating Conversion Errors
The following example tabulates conversion errors.
The pprriinnttff utility tells the user when conversion errors are detected
while producing numeric output. These results would be expected on an
implementation with 32-bit twos-complement integers when %%dd is
specified as the _f_o_r_m_a_t operand:
┌───────────────────────────────────────────────────────────────────┐
│ Arguments Standard Diagnostic │
│5a 5 printf: 5a not completely converted │
│9999999999 2147483647 printf: 9999999999: Results too large │
│-9999999999 -2147483648 printf: -9999999999: Results too large │
│ABC 0 printf: ABC expected numeric value │
└───────────────────────────────────────────────────────────────────┘
The value shown on standard output is what would be expected as the
return value from the function ssttrrttooll(3C). A similar correspondence
exists between %%uu and ssttrrttoouull(3C), and %%ee, %%ff and %%gg and ssttrrttoodd(3C).
EExxaammppllee 55 Printing Output for a Specific Locale
The following example prints output for a specific locale. In a locale
using the ISO/IEC 646:1991 standard as the underlying codeset, the
command:
example% pprriinnttff ""%%dd\\nn"" 33 ++33 --33 \\''33 \\""++33 ""''--33""
produces:
┌──────────────────────────────────┐
│33 Numeric value of constant 3 │
│33 Numeric value of constant 3 │
│−−33 Numeric value of constant −3 │
│5511 Numeric value of the │
│ character `3' in the ISO/IEC │
│ 646:1991 standard codeset │
│4433 Numeric value of the │
│ character `+' in the ISO/IEC │
│ 646:1991 standard codeset │
│4455 Numeric value of the │
│ character `−' in the SO/IEC │
│ 646:1991 standard codeset │
└──────────────────────────────────┘
In a locale with multi-byte characters, the value of a character is
intended to be the value of the equivalent of the wwcchhaarr__tt
representation of the character.
If an argument operand cannot be completely converted into an internal
value appropriate to the corresponding conversion specification, a
diagnostic message is written to standard error and the utility does
exit with a zero exit status, but continues processing any remaining
operands and writes the value accumulated at the time the error was
detected to standard output.
EExxaammppllee 66 Alternative floating point representation 1
The pprriinnttff utility supports an alternative floating point
representation (see pprriinnttff(3C) entry for the "%%aa"/"%%AA"), which allows
the output of floating-point values in a format that avoids the usual
base16 to base10 rounding errors.
example% printf "%a\n" 2 3.1 NaN
produces:
0x1.0000000000000000000000000000p+01
0x1.8ccccccccccccccccccccccccccdp+01
nan
EExxaammppllee 77 Alternative floating point representation 2
The following example shows two different representations of the same
floating-point value.
example% x=2 ; printf "%f == %a\n" x x
produces:
2.000000 == 0x1.0000000000000000000000000000p+01
EExxaammppllee 88 Output of unicode values
The following command will print the EURO unicode symbol (code-point
0x20ac).
example% LC_ALL=en_US.UTF-8 printf "[20ac]\n"
produces:
<euro>
where "<euro>" represents the EURO currency symbol character.
EExxaammppllee 99 Convert unicode character to unicode code-point value
The following command will print the hexadecimal value of a given
character.
example% export LC_ALL=en_US.UTF-8
example% printf "%x\n" "'<euro>"
where "<euro>" represents the EURO currency symbol character (code-
point 0x20ac).
produces:
20ac
EExxaammppllee 1100 Print the numeric value of an ASCII character
example% printf "%d\n" "'A"
produces:
65
EExxaammppllee 1111 Print the language-independent date and time format
To print the language-independent date and time format, the following
statement could be used:
example% printf "format" weekday month day hour min
For example,
$ printf format "Sunday" "July" 3 10 2
For American usage, format could be the string:
"%s, %s %d, %d:%.2d\n"
producing the message:
Sunday, July 3, 10:02
Whereas for EU usage, format could be the string:
"%1$s, %3$d. %2$s, %4$d:%5$.2d\n"
Note that the '$' characters must be properly escaped, such as
"%1\$s, %3\$d. %2\$s, %4\$d:%5\$.2d\n" in this case
producing the message:
Sunday, 3. July, 10:02
EENNVVIIRROONNMMEENNTT VVAARRIIAABBLLEESS
See eennvviirroonn(7) for descriptions of the following environment variables
that affect the execution of pprriinnttff: LLAANNGG, LLCC__AALLLL, LLCC__CCTTYYPPEE,
LLCC__MMEESSSSAAGGEESS, LLCC__NNUUMMEERRIICC, and NNLLSSPPAATTHH.
EEXXIITT SSTTAATTUUSS
The following exit values are returned:
00
Successful completion.
>>00
An error occurred.
AATTTTRRIIBBUUTTEESS
See aattttrriibbuutteess(7) for descriptions of the following attributes:
//uussrr//bbiinn//pprriinnttff
┌────────────────────┬───────────────────┐
│ ATTRIBUTE TYPE │ ATTRIBUTE VALUE │
├────────────────────┼───────────────────┤
│CSI │ Enabled │
├────────────────────┼───────────────────┤
│Interface Stability │ Committed │
├────────────────────┼───────────────────┤
│Standard │ See ssttaannddaarrddss(7). │
└────────────────────┴───────────────────┘
kksshh9933
┌────────────────────┬─────────────────┐
│ ATTRIBUTE TYPE │ ATTRIBUTE VALUE │
├────────────────────┼─────────────────┤
│Interface Stability │ Uncommitted │
└────────────────────┴─────────────────┘
SSEEEE AALLSSOO
aawwkk(1), bbcc(1), ddaattee(1), eecchhoo(1), kksshh9933(1), pprriinnttff(3C), ssttrrttoodd(3C),
ssttrrttooll(3C), ssttrrttoouull(3C), aattttrriibbuutteess(7), eennvviirroonn(7), ffoorrmmaattss(7),
ssttaannddaarrddss(7)
NNOOTTEESS
Using format specifiers (characters following '%') which are not listed
in the pprriinnttff(3C) or this manual page will result in undefined
behavior.
Using escape sequences (the character following a backslash ('\'))
which are not listed in the pprriinnttff(3C) or this manual page will result
in undefined behavior.
Floating-point values follow C99, XPG6 and IEEE 754 standard behavior
and can handle values the same way as the platform's |lloonngg ddoouubbllee|
datatype.
Floating-point values handle the sign separately which allows signs for
values like NaN (for example, -nan), Infinite (for example, -inf) and
zero (for example, -0.0).
May 11, 2014 PRINTF(1)
|