免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 23623 | 回复: 2
打印 上一主题 下一主题

bash 的內建命令「printf」小結 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-22 20:22 |只看该作者 |倒序浏览
bash 的內建命令「printf」小結

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
      這個我在這裡參加個一個討論,詳見
      http://bbs.chinaunix.net/viewthr ... &extra=page%3D6
%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 ~]$

礙於功力,以上文字如有錯漏,請指教,謝謝。

评分

参与人数 1可用积分 +1 收起 理由
waker + 1

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2006-10-23 09:46 |只看该作者
对我有帮助~~收下了

论坛徽章:
0
3 [报告]
发表于 2006-10-24 00:32 |只看该作者

以前只用来特定类型的数据格式化输出

学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP