mirror of git://git.suckless.org/sbase
387 lines
9.9 KiB
Groff
387 lines
9.9 KiB
Groff
.\" $OpenBSD: src/usr.bin/printf/printf.1,v 1.27 2014/05/25 07:36:36 jmc Exp $
|
|
.\"
|
|
.\" Copyright (c) 1989, 1990 The Regents of the University of California.
|
|
.\" 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 5.11 (Berkeley) 7/24/91
|
|
.\"
|
|
.Dd $Mdocdate: May 13 2014 $
|
|
.Dt PRINTF 1
|
|
.Os
|
|
.Sh NAME
|
|
.Nm printf
|
|
.Nd formatted output
|
|
.Sh SYNOPSIS
|
|
.Nm printf
|
|
.Ar format
|
|
.Op Ar argument ...
|
|
.Sh DESCRIPTION
|
|
.Nm printf
|
|
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 arguments after the first are treated as strings
|
|
if the corresponding format is
|
|
.Cm b ,
|
|
.Cm c
|
|
or
|
|
.Cm s ;
|
|
otherwise it is evaluated as a C constant, with the following extensions:
|
|
.Bl -bullet -offset indent
|
|
.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 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:
|
|
.Pp
|
|
.Bl -tag -width Ds -offset indent -compact
|
|
.It Cm \ee
|
|
Write an <escape> character.
|
|
.It Cm \ea
|
|
Write a <bell> character.
|
|
.It Cm \eb
|
|
Write a <backspace> character.
|
|
.It Cm \ef
|
|
Write a <form-feed> character.
|
|
.It Cm \en
|
|
Write a <new-line> character.
|
|
.It Cm \er
|
|
Write a <carriage return> character.
|
|
.It Cm \et
|
|
Write a <tab> character.
|
|
.It Cm \ev
|
|
Write a <vertical tab> character.
|
|
.It Cm \e\'
|
|
Write a <single quote> 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 .
|
|
.El
|
|
.Pp
|
|
Each format specification is introduced by the percent
|
|
.Pq Sq \&%
|
|
character.
|
|
The remainder of the format specifiers include,
|
|
in the following order:
|
|
.Bl -tag -width Ds
|
|
.It "Zero or more of the following flags:"
|
|
.Bl -tag -width Ds
|
|
.It Cm #
|
|
Specifies that the value should be printed in an
|
|
.Dq alternate form .
|
|
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 a ,
|
|
.Cm A ,
|
|
.Cm e ,
|
|
.Cm E ,
|
|
.Cm f ,
|
|
.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.
|
|
For all other formats, behaviour is undefined.
|
|
.It Cm \&\-
|
|
Specifies the
|
|
.Em left adjustment
|
|
of the output in the indicated field.
|
|
.It Cm \&+
|
|
Specifies that there should always be
|
|
a sign placed before the number when using signed formats.
|
|
.It Sq \&\ \&
|
|
A space specifies that a blank should be left before a positive number
|
|
for a signed format.
|
|
A
|
|
.Ql +
|
|
overrides a space if both are used.
|
|
.It Cm \&0
|
|
A zero character specifies that zero-padding should be used
|
|
rather than blank-padding.
|
|
This flag is ignored if used with a precision
|
|
specifier and any of the
|
|
.Cm d , i , o , u ,
|
|
or
|
|
.Cm x
|
|
.Pq Cm X
|
|
formats.
|
|
A
|
|
.Ql \&-
|
|
overrides a
|
|
.Ql \&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
|
|
.Pq Sq \&. ,
|
|
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; 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 diouxXfFeEgGaAbcs ) .
|
|
.El
|
|
.Pp
|
|
A field width or precision may be
|
|
.Ql \&*
|
|
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
|
|
.Pq Cm d No or Cm i ,
|
|
unsigned octal, unsigned decimal,
|
|
or unsigned hexadecimal
|
|
.Pq Cm x No or Cm X ,
|
|
respectively.
|
|
.It Cm fF
|
|
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.
|
|
.Pp
|
|
If the argument is infinity, it will be converted to [-]inf
|
|
.Pq Cm f
|
|
or [-]INF
|
|
.Pq Cm F ,
|
|
respectively.
|
|
If the argument is not-a-number (NaN), it will be converted to
|
|
[-]nan
|
|
.Pq Cm f
|
|
or [-]NAN
|
|
.Pq Cm F ,
|
|
respectively.
|
|
.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
|
|
.Sq E
|
|
is used for an
|
|
.Cm E
|
|
format.
|
|
.Pp
|
|
If the argument is infinity, it will be converted to [-]inf
|
|
.Pq Cm e
|
|
or [-]INF
|
|
.Pq Cm E ,
|
|
respectively.
|
|
If the argument is not-a-number (NaN), it will be converted to
|
|
[-]nan
|
|
.Pq Cm e
|
|
or [-]NAN
|
|
.Pq Cm E ,
|
|
respectively.
|
|
.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.
|
|
.Pp
|
|
If the argument is infinity, it will be converted to [-]inf
|
|
.Pq Cm g
|
|
or [-]INF
|
|
.Pq Cm G ,
|
|
respectively.
|
|
If the argument is not-a-number (NaN), it will be converted to
|
|
[-]nan
|
|
.Pq Cm g
|
|
or [-]NAN
|
|
.Pq Cm G ,
|
|
respectively.
|
|
.It Cm aA
|
|
The
|
|
.Ar argument
|
|
is printed in style
|
|
.Sm off
|
|
.Pf [\-]0xh Cm \&. No hhh Cm p No [\*(Pm]d
|
|
.Sm on
|
|
where there is one digit before the hexadecimal point and the number
|
|
after is equal to the precision specification for the argument.
|
|
When the precision is missing, enough digits are produced to convey
|
|
the argument's exact double-precision floating-point representation.
|
|
.Pp
|
|
If the argument is infinity, it will be converted to [-]inf
|
|
.Pq Cm a
|
|
or [-]INF
|
|
.Pq Cm A ,
|
|
respectively.
|
|
If the argument is not-a-number (NaN), it will be converted to
|
|
[-]nan
|
|
.Pq Cm a
|
|
or [-]NAN
|
|
.Pq Cm A ,
|
|
respectively.
|
|
.It Cm b
|
|
Characters from the string
|
|
.Ar argument
|
|
are printed with backslash-escape sequences expanded.
|
|
.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; however if the
|
|
precision is 0 or missing, all characters in the string are printed.
|
|
.It Cm \&%
|
|
Print a
|
|
.Ql \&% ;
|
|
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
|
|
.Ex -std printf
|
|
.Sh EXAMPLES
|
|
Convert a hexadecimal value to decimal and print it out:
|
|
.Pp
|
|
.D1 Ic $ printf \&"%d\en\&" 0x20
|
|
.Pp
|
|
Print the decimal representation of the character 'a' (see
|
|
.Xr ascii 7 ) :
|
|
.Pp
|
|
.D1 Ic $ printf \&"%d\en\&" \e'a
|
|
.Sh SEE ALSO
|
|
.Xr echo 1 ,
|
|
.Xr printf 3
|
|
.Sh STANDARDS
|
|
The
|
|
.Nm
|
|
utility is compliant with the
|
|
.St -p1003.1-2008
|
|
specification.
|
|
.Pp
|
|
The escape sequences \ee and \e' are extensions to that specification.
|
|
.Sh HISTORY
|
|
The
|
|
.Nm
|
|
command appeared in
|
|
.Bx 4.3 Reno .
|
|
.Sh CAVEATS
|
|
It is important never to pass a string with user-supplied data as a
|
|
format without using
|
|
.Ql %s .
|
|
An attacker can put format specifiers in the string to mangle your stack,
|
|
leading to a possible security hole.
|
|
.Pp
|
|
Always be sure to use the proper secure idiom:
|
|
.Bd -literal -offset indent
|
|
printf "%s" "$STRING"
|
|
.Ed
|
|
.Sh BUGS
|
|
Since arguments are translated from
|
|
.Tn ASCII
|
|
to floating-point, and
|
|
then back again, floating-point precision may be lost.
|