鍍金池/ 教程/ Linux/ Shell printf命令:格式化輸出語(yǔ)句
Shell 特殊變量:Shell $0, $#, $*, $@, $?, $$和命令行參數(shù)
Shell 文件包含
Shell 輸入輸出重定向:Shell Here Document,/dev/null
Shell 函數(shù)參數(shù)
Shell 簡(jiǎn)介
Shell printf命令:格式化輸出語(yǔ)句
第一個(gè) Shell 腳本
Shell echo 命令
Shell 運(yùn)算符:Shell 算數(shù)運(yùn)算符、關(guān)系運(yùn)算符、布爾運(yùn)算符、字符串運(yùn)算符等
Shell 數(shù)組:shell 數(shù)組的定義、數(shù)組長(zhǎng)度
Shell until 循環(huán)
Shell if else 語(yǔ)句
Shell 變量:Shell 變量的定義、刪除變量、只讀變量、變量類型
Shell 字符串
Shell 與編譯型語(yǔ)言的差異
Shell 函數(shù):Shell 函數(shù)返回值、刪除函數(shù)、在終端調(diào)用函數(shù)
Shell 替換
Shell case esac 語(yǔ)句
Shell for 循環(huán)
什么時(shí)候使用 Shell
Shell 注釋
幾種常見(jiàn)的 Shell
Shell while 循環(huán)
Shell break 和 continue 命令

Shell printf命令:格式化輸出語(yǔ)句

printf 命令用于格式化輸出, 是echo命令的增強(qiáng)版。它是 C 語(yǔ)言 printf()庫(kù)函數(shù)的一個(gè)有限的變形,并且在語(yǔ)法上有些不同。

注意:printf 由 POSIX 標(biāo)準(zhǔn)所定義,移植性要比 echo 好。

如同 echo 命令,printf 命令也可以輸出簡(jiǎn)單的字符串:

$printf "Hello, Shell\n"
Hello, Shell
$

printf 不像 echo 那樣會(huì)自動(dòng)換行,必須顯式添加換行符(\n)。

printf 命令的語(yǔ)法:

printf  format-string  [arguments...]

format-string 為格式控制字符串,arguments 為參數(shù)列表。

printf()在 C 語(yǔ)言入門(mén)教程中已經(jīng)講到,功能和用法與 printf 命令類似,請(qǐng)查看:C 語(yǔ)言格式輸出函數(shù) printf()詳解

這里僅說(shuō)明與 C 語(yǔ)言 printf()函數(shù)的不同:

  • printf 命令不用加括號(hào)
  • format-string 可以沒(méi)有引號(hào),但最好加上,單引號(hào)雙引號(hào)均可。
  • 參數(shù)多于格式控制符(%)時(shí),format-string 可以重用,可以將所有參數(shù)都轉(zhuǎn)換。
  • arguments 使用空格分隔,不用逗號(hào)。

請(qǐng)看下面的例子:

# format-string 為雙引號(hào)
$ printf "%d %s\n" 1 "abc"
1 abc
# 單引號(hào)與雙引號(hào)效果一樣 
$ printf '%d %s\n' 1 "abc" 
1 abc
# 沒(méi)有引號(hào)也可以輸出
$ printf %s abcdef
abcdef
# 格式只指定了一個(gè)參數(shù),但多出的參數(shù)仍然會(huì)按照該格式輸出,format-string 被重用
$ printf %s abc def
abcdef
$ printf "%s\n" abc def
abc
def
$ printf "%s %s %s\n" a b c d e f g h i j
a b c
d e f
g h i
j
# 如果沒(méi)有 arguments,那么 %s 用 NULL 代替,%d 用0代替
$ printf "%s and %d \n" 
and 0
# 如果以 %d 的格式來(lái)顯示字符串,那么會(huì)有警告,提示無(wú)效的數(shù)字,此時(shí)默認(rèn)置為0
$ printf "The first program always prints'%s,%d\n'" Hello Shell
-bash: printf: Shell: invalid number
The first program always prints 'Hello,0'
$

注意,根據(jù) POSIX 標(biāo)準(zhǔn),浮點(diǎn)格式%e、%E、%f、%g與%G是“不需要被支持”。這是因?yàn)?awk 支持浮點(diǎn)預(yù)算,且有它自己的 printf 語(yǔ)句。這樣 Shell 程序中需要將浮點(diǎn)數(shù)值進(jìn)行格式化的打印時(shí),可使用小型的 awk 程序?qū)崿F(xiàn)。然而,內(nèi)建于 bash、ksh93 和 zsh 中的 printf 命令都支持浮點(diǎn)格式。