| .\" Copyright (c) 1989, 1990, 1993 |
| .\" The Regents of the University of California. All rights reserved. |
| .\" Copyright (c) 1997-2005 |
| .\" Herbert Xu <herbert@gondor.apana.org.au>. All rights reserved. |
| .\" |
| .\" This code is derived from software contributed to Berkeley by |
| .\" the Institute of Electrical and Electronics Engineers, Inc. |
| .\" |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that the following conditions |
| .\" are met: |
| .\" 1. Redistributions of source code must retain the above copyright |
| .\" notice, this list of conditions and the following disclaimer. |
| .\" 2. Redistributions in binary form must reproduce the above copyright |
| .\" notice, this list of conditions and the following disclaimer in the |
| .\" documentation and/or other materials provided with the distribution. |
| .\" 3. Neither the name of the University nor the names of its contributors |
| .\" may be used to endorse or promote products derived from this software |
| .\" without specific prior written permission. |
| .\" |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| .\" SUCH DAMAGE. |
| .\" |
| .\" from: @(#)printf.1 8.1 (Berkeley) 6/6/93 |
| .\" |
| .Dd November 5, 1993 |
| .Dt PRINTF 1 |
| .Os |
| .Sh NAME |
| .Nm printf |
| .Nd formatted output |
| .Sh SYNOPSIS |
| .Nm |
| .Ar format |
| .Op Ar arguments ... |
| .Sh DESCRIPTION |
| .Nm |
| formats and prints its arguments, after the first, under control |
| of the |
| .Ar format . |
| The |
| .Ar 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 |
| .Ar argument . |
| .Pp |
| The |
| .Ar arguments |
| after the first are treated as strings if the corresponding format is |
| either |
| .Cm b , |
| .Cm B , |
| .Cm c |
| or |
| .Cm s ; |
| otherwise it is evaluated as a C constant, with the following extensions: |
| .Pp |
| .Bl -bullet -offset indent -compact |
| .It |
| A leading plus or minus sign is allowed. |
| .It |
| If the leading character is a single or double quote, the value is the |
| .Tn ASCII |
| code of the next character. |
| .El |
| .Pp |
| The format string is reused as often as necessary to satisfy the |
| .Ar arguments . |
| Any extra format specifications are evaluated with zero or the null |
| string. |
| .Pp |
| Character escape sequences are in backslash notation as defined in |
| .St -ansiC . |
| The characters and their meanings are as follows: |
| .Bl -tag -width Ds -offset indent |
| .It Cm \ee |
| Write an \*[Lt]escape\*[Gt] character. |
| .It Cm \ea |
| Write a \*[Lt]bell\*[Gt] character. |
| .It Cm \eb |
| Write a \*[Lt]backspace\*[Gt] character. |
| .It Cm \ef |
| Write a \*[Lt]form-feed\*[Gt] character. |
| .It Cm \en |
| Write a \*[Lt]new-line\*[Gt] character. |
| .It Cm \er |
| Write a \*[Lt]carriage return\*[Gt] character. |
| .It Cm \et |
| Write a \*[Lt]tab\*[Gt] character. |
| .It Cm \ev |
| Write a \*[Lt]vertical tab\*[Gt] character. |
| .It Cm \e\' |
| Write a \*[Lt]single quote\*[Gt] character. |
| .It Cm \e" |
| Write a \*[Lt]double quote\*[Gt] character. |
| .It Cm \e\e |
| Write a backslash character. |
| .It Cm \e Ns Ar num |
| Write an 8\-bit character whose |
| .Tn ASCII |
| value is the 1\-, 2\-, or 3\-digit octal number |
| .Ar num . |
| .It Cm \ex Ns Ar xx |
| Write an 8\-bit character whose |
| .Tn ASCII |
| value is the 1\- or 2\-digit hexadecimal number |
| .Ar xx . |
| .El |
| .Pp |
| Each format specification is introduced by the percent character |
| (``%''). |
| The remainder of the format specification includes, |
| in the following order: |
| .Bl -tag -width Ds |
| .It "Zero or more of the following flags:" |
| .Bl -tag -width Ds |
| .It Cm # |
| A `#' character |
| specifying that the value should be printed in an ``alternative form''. |
| For |
| .Cm b , |
| .Cm c , |
| .Cm d , |
| and |
| .Cm s |
| formats, this option has no effect. |
| For the |
| .Cm o |
| format the precision of the number is increased to force the first |
| character of the output string to a zero. |
| For the |
| .Cm x |
| .Pq Cm X |
| format, a non-zero result has the string |
| .Li 0x |
| .Pq Li 0X |
| prepended to it. |
| For |
| .Cm e , |
| .Cm E , |
| .Cm f , |
| .Cm g , |
| and |
| .Cm 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 |
| .Cm g |
| and |
| .Cm G |
| formats, trailing zeros are not removed from the result as they |
| would otherwise be. |
| .\" I turned this off - decided it isn't a valid use of '#' |
| .\" For the |
| .\" .Cm B |
| .\" format, backslash-escape sequences are expanded first; |
| .It Cm \&\- |
| A minus sign `\-' which specifies |
| .Em left adjustment |
| of the output in the indicated field; |
| .It Cm \&+ |
| A `+' character specifying that there should always be |
| a sign placed before the number when using signed formats. |
| .It Sq \&\ \& |
| A space specifying that a blank should be left before a positive number |
| for a signed format. |
| A `+' overrides a space if both are used; |
| .It Cm \&0 |
| A zero `0' character indicating that zero-padding should be used |
| rather than blank-padding. |
| A `\-' overrides a `0' if both are used; |
| .El |
| .It "Field Width:" |
| An optional digit string specifying a |
| .Em field width ; |
| if the output string has fewer characters than the field width it will |
| be blank-padded on the left (or right, if the left-adjustment indicator |
| has been given) to make up the field width (note that a leading zero |
| is a flag, but an embedded zero is part of a field width); |
| .It Precision : |
| An optional period, |
| .Sq Cm \&.\& , |
| followed by an optional digit string giving a |
| .Em precision |
| which specifies the number of digits to appear after the decimal point, |
| for |
| .Cm e |
| and |
| .Cm f |
| formats, or the maximum number of characters to be printed |
| from a string |
| .Sm off |
| .Pf ( Cm b No , |
| .Sm on |
| .Cm B |
| and |
| .Cm s |
| formats); if the digit string is missing, the precision is treated |
| as zero; |
| .It Format : |
| A character which indicates the type of format to use (one of |
| .Cm diouxXfwEgGbBcs ) . |
| .El |
| .Pp |
| A field width or precision may be |
| .Sq Cm \&* |
| instead of a digit string. |
| In this case an |
| .Ar argument |
| supplies the field width or precision. |
| .Pp |
| The format characters and their meanings are: |
| .Bl -tag -width Fl |
| .It Cm diouXx |
| The |
| .Ar argument |
| is printed as a signed decimal (d or i), unsigned octal, unsigned decimal, |
| or unsigned hexadecimal (X or x), respectively. |
| .It Cm f |
| The |
| .Ar argument |
| is printed in the style |
| .Sm off |
| .Pf [\-]ddd Cm \&. No ddd |
| .Sm on |
| 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. |
| .It Cm eE |
| The |
| .Ar argument |
| is printed in the style |
| .Sm off |
| .Pf [\-]d Cm \&. No ddd Cm e No \\*(Pmdd |
| .Sm on |
| 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. |
| .It Cm gG |
| The |
| .Ar argument |
| is printed in style |
| .Cm f |
| or in style |
| .Cm e |
| .Pq Cm E |
| whichever gives full precision in minimum space. |
| .It Cm b |
| Characters from the string |
| .Ar argument |
| are printed with backslash-escape sequences expanded. |
| .br |
| The following additional backslash-escape sequences are supported: |
| .Bl -tag -width Ds |
| .It Cm \ec |
| Causes |
| .Nm |
| to ignore any remaining characters in the string operand containing it, |
| any remaining string operands, and any additional characters in |
| the format operand. |
| .It Cm \e0 Ns Ar num |
| Write an 8\-bit character whose |
| .Tn ASCII |
| value is the 1\-, 2\-, or 3\-digit |
| octal number |
| .Ar num . |
| .It Cm \e^ Ns Ar c |
| Write the control character |
| .Ar c . |
| Generates characters `\e000' through `\e037`, and `\e177' (from `\e^?'). |
| .It Cm \eM\- Ns Ar c |
| Write the character |
| .Ar c |
| with the 8th bit set. |
| Generates characters `\e241' through `\e376`. |
| .It Cm \eM^ Ns Ar c |
| Write the control character |
| .Ar c |
| with the 8th bit set. |
| Generates characters `\e000' through `\e037`, and `\e177' (from `\eM^?'). |
| .El |
| .It Cm B |
| Characters from the string |
| .Ar argument |
| are printed with unprintable characters backslash-escaped using the |
| .Sm off |
| .Pf ` Cm \e Ar c No ', |
| .Pf ` Cm \e^ Ar c No ', |
| .Pf ` Cm \eM\- Ar c No ' |
| or |
| .Pf ` Cm \eM^ Ar c No ', |
| .Sm on |
| formats described above. |
| .It Cm c |
| The first character of |
| .Ar argument |
| is printed. |
| .It Cm s |
| Characters from the string |
| .Ar argument |
| are printed until the end is reached or until the number of characters |
| indicated by the precision specification is reached; if the |
| precision is omitted, all characters in the string are printed. |
| .It Cm \&% |
| Print a `%'; no argument is used. |
| .El |
| .Pp |
| 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. |
| .Sh EXIT STATUS |
| .Nm |
| exits 0 on success, 1 on failure. |
| .Sh SEE ALSO |
| .Xr echo 1 , |
| .Xr printf 3 , |
| .Xr printf 9 |
| .Xr vis 3 |
| .Sh STANDARDS |
| The |
| .Nm |
| utility conforms to |
| .St -p1003.1-2001 . |
| .Pp |
| Support for the floating point formats and `*' as a field width and precision |
| are optional in POSIX. |
| .Pp |
| The behaviour of the %B format and the \e', \e", \exxx, \ee and |
| \e[M][\-|^]c escape sequences are undefined in POSIX. |
| .Sh BUGS |
| Since the floating point numbers are translated from |
| .Tn ASCII |
| to floating-point and |
| then back again, floating-point precision may be lost. |
| .Pp |
| Hexadecimal character constants are restricted to, and should be specified |
| as, two character constants. This is contrary to the ISO C standard but |
| does guarantee detection of the end of the constant. |