Printf bash builtin

Revision as of 13:35, 9 February 2014 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The printf command is one of a set of Bash Builtin Commands. It provides a method to print pre-formatted text, expanding shells script standard output over the echo command. See format and example below:

printf <FORMAT> <ARGUMENTS...>
printf "Last name: %s\nName: %s\n" "$SURNAME" "$LASTNAME"

printf does not automatically line feed unlike the echo command. LF is not implied, it must be stated. See two equivalents below:

echo "Hello World"
printf "Hello World\n"
printf "%s\n" "Hello World" 

Use of %s formatting argument will also allow it to be applied to multiple lines. The following example will output a linefeed for each of the lines in the printf statement.

printf "%s\n" "I have eaten" "the plums" "that were in" "the icebox"

Format strings

The format string interpretion is derived from the C printf() function family. Only format specifiers that end in one of the letters diouxXfeEgGaAcs are recognized.

To print a literal % (percent-sign), use %% in the format string.

__**Again:**__ Every format specifier expects an associated argument provided!

These specifiers have different names, depending who you ask. But they all mean the same: A placeholder for data with a specified format:

 * format placeholder
 * conversion specification
 * formatting token
 * ...

^Format^Description^ |%b|Print the associated argument while interpreting backslash escapes in there| |%q|Print the associated argument **shell-quoted**, reusable as input| |%d|Print the associated argument as **signed decimal** number| |%i|Same as %d| |%o|Print the associated argument as **unsigned octal** number| |%u|Print the associated argument as **unsigned decimal** number| |%x|Print the associated argument as **unsigned hexadecimal** number with lower-case hex-digits (a-f)| |%X|Same as %x, but with upper-case hex-digits (A-F)| |%f|Interpret and print the associated argument as **floating point** number| |%e|Interpret the associated argument as **double**, and print it in <N>±e<N> format| |%E|Same as %e, but with an upper-case E in the printed format| |%g|Interprets the associated argument as **double**, but prints it like %f or %e| |%G|Same as %g, but print it like %E| |%c|Interprets the associated argument as **char**: only the first character of a given argument is printed| |%s|Interprets the associated argument literally as string| |%n|Assigns the number of characters printed so far to the variable named in the corresponding argument. Can't specify an array index. If the given name is already an array, the value is assigned to the zeroth element.| |%a|Interprets the associated argument as **double**, and prints it in the form of a C99 [| hexadecimal floating-point literal].| |%A|Same as %a, but print it like %E| |%(FORMAT)T|output the date-time string resulting from using FORMAT as a format string for strftime(3). The associated argument is the number of seconds since Epoch, or -1 (current time) or -2 (shell startup time). If no corresponding argument is supplies, the current time is used as default| |%%|No conversion is done. Produces a % (percent sign)|

Some of the mentioned format specifiers can modify their behaviour by getting a format modifier:

Last modified on 9 February 2014, at 13:35