The format specifiers are letters preceded by a percent sign. Optional modifiers may be placed between the two characters. The specifiers are replaced by the corresponding argument. When there are more arguments than specifiers, the format string is reused until all the arguments have been consumed. The most commonly used specifiers are %s,%d,%f and %x.
        The %s specifier prints the literal characters in the argument:
$ printf “%s\n” Print arguments on “separate lines” 
Print
Arguments
On
Separate lines
code-box
%b is like %s except that escape sequences in the arguments are translated:
$ printf “%b\n” “Hello\nworld” “12\tword”
Hello
World
12 word
code-box
        Integers are printed with %d. The integer may be specified as a decimal, octal (using a leading 0), or hexadecimal (preceding the hex number with 0x) number. If the number is not a valid integer, printf prints an error message:
$ printf “%d\n” 23 45 56.78 0xff 011
23
45
Bash: printf: 56.78: invalid number
0
255
9
code-box
        For decimal fractions or floating-point number,use $f. by default they will be printed with six decimal places:
$ printf “%e\n” 12.34 23 56.78 123.45678
1.234000e+01 
2.300000e+01 
5.678900e+01 
1.234568e+02
code-box
        Integers can be printed in hexadecimal using %x for lowercase letters or %X for uppercase letters. For example, when specifying colors for a web page, they are specified in hex notation. I know from the rgb.txt file included with the X window system that the red-green-blue values for royal blue are 65,105, and 225. To convert them to a style rule for a web page, use this:
$ printf “color: #%02x%02x%02;x;\n" 65 105 225 
Color: #4169e1;
code-box
Width Specification
        You can modify the formats by following the percent sign with a width specification. The argument will be printed flush right in a field of that width or will be flush left it the number is negative. Here we have the first field with a width of eight characters; the words will be printed flush right. Then there is a field 15 character wide, which will be printed flush left:
$ printf "%8s %-15s:\n" first second third fourth fifth sixth 
 first second :
 third fourth :
 fifth sixth :
code-box
        if the width specifications is preceded by a 0, the numbers are padded with leading zeroes to fill the width:
$ printf “%04d\n” 12 23 56 123 255 
0012
0023
0056
0123
0255
code-box
        A width specifier with a decimal fraction specifies the precision of a floating-point number or the maximum width of a string:
$ printf “%12.4s %9.2f\n” John 2 Jackson 4.579 Walter 2.9 
John 2.00
Jack 4.58
Walt 2.90
code-box
        The script shown in listing 2-2 uses printf to output a simple sales report.
#!/bin/bash
#: Description : print formatted sales report
## Build a long string of equals signs
divider=====================================
divider=$divider$divider
## Format strings for printf
header="\n %-10s %11s %8s %10s\n"
format=" %-10s %11.2f %8d %10.2f\n"
## Width of divider
totalwidth=44
## Print categories
printf "$header" ITEM "PER UNIT" NUM TOTAL
## Print divider to match width of report
printf "%$totalwidth.${totalwidth}s\n" "$divider"
## Print lines of report
printf "$format" \
 Chair 79.95 4 319.8 \
 Table 209.99 1 209.99 \
 Armchair 315.49 2 630.98
## The resulting report looks like this:
ITEM PER UNIT NUM TOTAL
==============================================================
 Chair 79.95 4 319.80
 Table 209.99 1 209.99
 Armchair 315.49 2 630.98
code-box
        Note the use of braces around the second total width variable name: ${totalwidth}. In the first instance, the name is followed by a period, which cannot be part of a variable name. in the second, it is followed by the letters, which could be, so the total width name must be separated from it by using braces.
Printing to a Variable
        With version 3.1 bash added a -v option to store the output in a variable instead of printing it to the standard output:
$ printf -v num4 "%04d" 4
$ printf "%s\n" "$num4"
0004
code-box
Line Continuation
        At the end of the report script, the last four lines are read as a single line. Using line continuation. A backslash at the end of a line tells the shell to ignore the newline character, effectively joining the next line to the current one.

0Comments

Previous Post Next Post

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel