printf (Unix)

{{short description|Shell command for formatting and outputting text; like printf() library function}}

{{lowercase|title=printf}}

{{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+{{Cite web|url=https://linux.die.net/man/1/printf|title=printf(1): format/print data - Linux man page|website=linux.die.net}}

| website =

}}

printf 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{{Cite web|url=https://www.gnu.org/software/coreutils/manual/coreutils.html#printf-invocation|title=GNU Coreutils|website=www.gnu.org}}

The command has similar syntax and semantics as the library function. The command outputs text to standard output{{man|1|printf|Linux}} 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, %b causes the command to expand backslash escape sequences (for example \n for newline), and %q outputs an item that can be used as shell input. 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.{{man|cu|printf|SUS}} It first appeared in 4.3BSD-Reno.{{man|1|printf|FreeBSD}}

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.

Examples

This prints a list of numbers:

$ for N in 4 8 10; do printf " >> %03d << \n" $N; done

>> 004 <<

>> 008 <<

>> 010 <<

This produces output for a directory's content similar to ls:

$ printf "%s\n" *

References

{{Reflist}}