您的位置:首页 > 运维架构 > Shell

bash 的內建命令「printf」小結

2014-02-23 23:42 148 查看
printf 是bash 2.0X ~ 3.X 的內建命令, 跟內建命令「echo」一樣,都是把訊息

打印到終端上,不同之處是printf 具有更多的選項和格式化的工能,看命令的名

字就是 「print formatted」 的意思。

printf 格式化的的選項如下

%a -- 十六進制浮點數字,用 lowercase letter 顯示

   ex: printf "%a\n" 16

   在% 和 a 之間可用數字控制顯示格式,如

   printf "%50a\n" 16

   看有什麼分別?

%A -- 如上,以 uppecase letter 顯示

%b -- 將 \ 的結果擴展

    ex: printf "%b\n" \\100

%c -- 顯示一個單一的子母

    ex: printf "%c\n" string

    得到 s , 和%a 一樣,可在兩者之間用數字控制顯示格式,

%d -- 整數

      ex: printf "%d\n" 100000

      它還支援數字用「,」由高位每三個數字以「,」分開,格式是

      printf "%'d\n" 10000000

%e -- 以科學記號法浮點數顯示

      ex: printf "%e\n" 10.00

%f -- 浮點數顯示

      ex: printf "%f\n" 10

       此外它也支援像 %d 的 "%'d" 格式,這是本板高手火兄的發現,謝謝。:)

%g --  據手冊所說是樣 bash 根據數值在 %e 和 %f 之間選擇顯示形式,但我的

      測試卻像 seq -f 的'%g' 的數字顯示方式, 在 % 和 g 之間插入 「0數字」

      的方式就會在不足的整數前面加上一些「0」 , 如

      printf "%03g" 1 2 12 123 得到 001 002 012 123

      在 % 和 g 之間沒 「0」 的數字視為控制顯示格式。

%i -- 和 %d 一樣

%o -- 以八進制顯示數字,只能用整數

      ex: printf "%o\n" 8

%q -- 倨手冊原文為

       Quote a string so it can be read properly by a shell script

       大意為以 " " 保護字符使腳本正確讀入,因試不出來,還望高人指教,

%s -- 和%q 相反,原文為

       Display an unquoted string

       我試出%s 和 %q 的結果為

       [victor@localhost ~]$ printf "%q\n" str

       str

       [victor@localhost ~]$ printf "%q\n" str

       str

       [victor@localhost ~]$ printf "%s\n" str

       str

       [victor@localhost ~]$ printf "%s\n" ""str""

       str

       [victor@localhost ~]$ printf "%q\n" ""str""

       str

       [victor@localhost ~]$ printf "%q\n" '"str"'

       \"str\"

       [victor@localhost ~]$ printf "%q\n" "'str'"

       \'str\'

       [victor@localhost ~]$ printf "%q\n" "\'str\'"

       \\\'str\\\'

       [victor@localhost ~]$ printf "%s\n" "\'str\'"

       \'str\'

%u -- 這個也是顯示整數,跟 %d 差不多, 也支援 "%'" 的格式,但在測試下

      發現它和 %d 如以以下方式打印字符的話,不但不會報錯,還返回一些

      數字

       [victor@localhost ~]$ printf "%u\n" '"str"'

       115

       [victor@localhost ~]$ printf "%u\n" str

       bash: printf: str: invalid number

       0

       [victor@localhost ~]$ printf "%u\n" 115

       115

       [victor@localhost ~]$ printf "%u\n" "str"

       bash: printf: str: invalid number

       0

       [victor@localhost ~]$ printf "%u\n" '"str"'

       115

       [victor@localhost ~]$ printf "%'u\n" 1234

       1,234

       [victor@localhost ~]$ printf "%d\n" '"str"'

       115

       [victor@localhost ~]$ printf "%d\n" "'str'"

       115

       [victor@localhost ~]$ printf "%d\n" "'fuck'"

       102

       [victor@localhost ~]$ printf "%u\n" "'fuck'"

       102

       [victor@localhost ~]$

       不明,請高手指點,謝謝。

%x -- 以十六進制整數 lowercase letter顯示數字      

      ex: printf "%x\n" 16

      它也支援像 「%0數字g」的方式,整數不足指定的數位在前面加上 「0」

%X -- 同上,以 Uppercase letter 顯示數字

%% -- 就是顯示 %

printf 也可將八進制的數字顯示成十進制,方法是在八進制的數字前加上「\」和

「0」, 如 printf "%d\n" \0101 

其它如 \b 就是倒格(backspace) , \f Form feed , \n 是新行 ,\r 回鍵 ,\t 是 tab

, \v vertical tab , \' 是 single quote character ,\\ 就是一個 「\」。

最後,太長的數字 printf 會報錯, 

[victor@localhost ~]$ printf "%d\n" 123456789123456789012

bash: printf: warning: 123456789123456789012: 數值運算結果超出範圍

9223372036854775807

[victor@localhost ~]$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: