| .\" 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 Ns \&, | |
| .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. |