{{short description|Shell command for formatting and outputting text; like printf() library function}} {{Lowercase title}} {{Refimprove|date=July 2010}} {{Infobox software | name = printf | logo = | screenshot = Printf-example-command.gif | screenshot size = | caption = | author = | developer = Various open-source and commercial developers | released = | latest release version = | latest release date = | operating system = Unix and Unix-like | platform = Cross-platform | genre = Command | license = coreutils: GPLv3+<ref name="coreutils">{{Cite web|url=https://linux.die.net/man/1/printf|title=printf(1): format/print data - Linux man page|website=linux.die.net|access-date=2019-02-24|archive-date=2018-11-21|archive-url=https://web.archive.org/web/20181121044021/https://linux.die.net/man/1/printf|url-status=live}}</ref> | website = }} <code>'''printf'''</code> is a shell command that formats and outputs text like the same-named C function. It is available in a variety of Unix and Unix-like systems. Some shells implement the command as builtin and some provide it as a utility program<ref>{{Cite web|url=https://www.gnu.org/software/coreutils/manual/coreutils.html#printf-invocation|title=GNU Coreutils|website=www.gnu.org|access-date=2019-02-27|archive-date=2004-02-05|archive-url=https://web.archive.org/web/20040205100516/https://www.gnu.org/software/coreutils/manual/coreutils.html#printf-invocation|url-status=live}}</ref>

The command has similar syntax and semantics as the library function. The command outputs text to standard output<ref name=":0">{{man|1|printf|Linux}}</ref> as specified by a format string and a list of values. Characters of the format string are copied to the output verbatim except when a format specifier is found which causes a value to be output per the specifier.

The command has some aspects unlike the library function. In addition to the library function format specifiers, <code>%b</code> causes the command to expand backslash escape sequences (for example <code>\n</code> for newline), and <code>%q</code> outputs an item that can be used as shell input.<ref name=":0"/> The value used for an unmatched specifier (too few values) is an empty string for {{code|%s}} or 0 for a numeric specifier. If there are more values than specifiers, then the command restarts processing the format string from its beginning,

The command is part of the X/Open Portability Guide since issue 4 of 1992. It was inherited into the first version of POSIX.1 and the Single Unix Specification.<ref>{{man|cu|printf|SUS}}</ref> It first appeared in 4.3BSD-Reno.<ref>{{man|1|printf|FreeBSD}}</ref>

The implementation bundled in GNU Core Utilities was written by David MacKenzie. It has an extension {{tt|%q}} for escaping strings in POSIX-shell format.<ref name=":0"/>

==Examples== This prints a list of numbers:

<syntaxhighlight lang="bash"> $ for N in 4 8 10; do printf " >> %03d << \n" $N; done >> 004 << >> 008 << >> 010 << </syntaxhighlight>

This produces output for a directory's content similar to <code>ls</code>:

<syntaxhighlight lang="bash"> $ printf "%s\n" * </syntaxhighlight>

<!--==See also==-->

==References== {{Reflist}}

==External links== {{Wikibooks|Guide to Unix|Commands}}

{{Unix commands}}

Category:Standard Unix programs Category:IBM i Qshell commands