Shell printf 号令
上一章节咱们进修了 Shell 的 echo 号令,本章节咱们来进修 Shell 的另外一个输入号令 printf。
printf 号令仿照 C 法式库(library)里的 printf() 法式。
printf 由 POSIX 规范所界说,是以利用 printf 的剧本比利用 echo 移植性好。
printf 利用援用文本或空格分开的参数,里面能够在 printf 中利用格局化字符串,还能够拟定字符串的宽度、摆布对齐体例等。默许 printf 不会像 echo 主动增加换行符,咱们能够手动增加 \n。
printf 号令的语法:
printf format-string arguments...
参数申明:
- format-string: 为格局节制字符串
- arguments: 为参数列表。
实比方下:
$ echo "Hello, Shell" Hello, Shell $ printf "Hello, Shell\n" Hello, Shell $
接上去,我来用一个剧原来表现printf的壮大功效:
#!/bin/bash # author:【WEB手艺大学】教程 # url:xfitphysio.com printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
履行剧本,输入成果以下所示:
姓名 性别 体重kg 郭靖 男 66.12 杨过 男 48.65 郭芙 女 47.99
%s %c %d %f都是格局替换符
%-10s 指一个宽度为10个字符(-表现左对齐,不则表现右对齐),任何字符城市被显现在10个字符宽的字符内,若是缺乏则主动以空格添补,跨越也会将内容全数显现出来。
%-4.2f 指格局化为小数,此中.2指保留2位小数。
更多实例:
#!/bin/bash # author:【WEB手艺大学】教程 # url:xfitphysio.com # format-string为双引号 printf "%d %s\n" 1 "abc" # 单引号与双引号成果一样 printf '%d %s\n' 1 "abc" # 不引号也能够输入 printf %s abcdef # 格局只指定了一个参数,但多出的参数依然会根据该格局输入,format-string 被重用 printf %s abc def printf "%s\n" abc def printf "%s %s %s\n" a b c d e f g h i j # 若是不 arguments,那末 %s 用NULL取代,%d 用 0 取代 printf "%s and %d \n"
履行剧本,输入成果以下所示:
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0
printf的本义序列
序列 | 申明 |
---|---|
\a | 正告字符,凡是为ASCII的BEL字符 |
\b | 撤退退却 |
\c | 按捺(不显现)输入成果中任何开头的换行字符(只在%b格局唆使符节制下的参数字符串中有用),并且,任何留在参数里的字符、任何接上去的参数和任何留在格局字符串中的字符,都被疏忽 |
\f | 换页(formfeed) |
\n | 换行 |
\r | 回车(Carriage return) |
\t | 程度制表符 |
\v | 垂直制表符 |
\\ | 一个字面上的反斜杠字符 |
\ddd | 表现1到3位数八进制值的字符。仅在格局字符串中有用 |
\0ddd | 表现1到3位的八进制值字符 |
实例
$ printf "a string, no processing:<%s>\n" "A\nB" a string, no processing:<A\nB> $ printf "a string, no processing:<%b>\n" "A\nB" a string, no processing:<A B> $ printf "xfitphysio.com \a" xfitphysio.com $ #不换行