1. 程式人生 > >shell printf 用法

shell printf 用法

 $printf "The first program always prints '%s,%s!'\n" Hello world為什麼!'出錯?
%s!是無法識別的
可以寫成
$printf "The first program always prints '%s,%s' \n" Hello world!

printf某些情況可以替代echo.

1 #!/bin/bash
2 # printf 示例
3
4 PI=3.14159265358979
5 DecimalConstant=31373
6 Message1="Greetings,"
7 Message2="Earthling."
8
9 echo
10
11 printf "Pi to 2 decimal places = %1.2f" $PI
12 echo
13 printf "Pi to 9 decimal places = %1.9f" $PI # 都能夠正確的結束.
14
15 printf "\n" # 列印一個換行,
16 # 等價於 'echo' . . .
17
18 printf "Constant = \t%d\n" $DecimalConstant # 插入一個 tab (\t).
19
20 printf "%s %s \n" $Message1 $Message2
21
22 echo
23
24 # ==========================================#
25 # 模擬C函式, sprintf().
26 # 使用一個格式化的字串來載入一個變數.
27
28 echo
29
30 Pi12=$(printf "%1.12f" $PI)
31 echo "Pi to 12 decimal places = $Pi12"
32
33 Msg=`printf "%s %s \n" $Message1 $Message2`
34 echo $Msg; echo $Msg
35
36 # 像我們所看到的一樣, 現在'sprintf'可以
37 #+ 作為一個可被載入的模組,
38 #+ 但是不具可移植性.
39
40 exit 0

使用printf的最主要的應用就是格式化錯誤訊息.

1 E_BADDIR=65
2
3 var=nonexistent_directory
4
5 error()
6 {
7 printf "
[email protected]
" >&2
8 # 格式化傳遞進來的位置引數, 並把它們送到stderr.
9 echo
10 exit $E_BADDIR
11 }
12
13 cd $var || error $"Can't cd to %s." "$var"
14
15 # 感謝, S.C.

[email protected]:~> printf "%s \n" $var
變數不可以如此輸出,因為printf命令的ARGUMENT認字串。