linux printf 命令
一、printf 命令概述
printf 是 Linux/unix 系統(tǒng)中一個強大的格式化輸出命令,它源自 C 語言中的 printf() 函數(shù)。與 echo 命令相比,printf 提供了更精確的輸出控制和格式化能力。
主要特點
- 精確格式化:可以控制輸出的對齊方式、寬度、精度等
- 不自動換行:默認(rèn)不會在輸出末尾添加換行符(與 echo 不同)
- 多語言支持:支持 Unicode 字符輸出
- 變量插入:可以在字符串中插入變量值
二、基本語法
參數(shù)說明
- format-string:格式字符串,包含普通字符和格式說明符
- arguments:與格式說明符對應(yīng)的參數(shù)列表
三、格式說明符詳解
格式說明符以 % 開頭,基本形式為:
%[flags][width][.precision]specifier
常用格式說明符
說明符 | 描述 | 示例 |
---|---|---|
%s | 字符串 | printf “%s” “hello” |
%d | 十進制整數(shù) | printf “%d” 123 |
%f | 浮點數(shù) | printf “%f” 3.14 |
%x | 十六進制整數(shù)(小寫) | printf “%x” 255 |
%X | 十六進制整數(shù)(大寫) | printf “%X” 255 |
%o | 八進制整數(shù) | printf “%o” 8 |
%c | 單個字符 | printf “%c” 65 |
修飾符選項
1. 標(biāo)志(flags)
標(biāo)志 | 描述 | 示例 |
---|---|---|
– | 左對齊 | printf “%-10s” “hi” |
+ | 顯示正負(fù)號 | printf “%+d” 123 |
0 | 用零填充 | printf “%05d” 12 |
空格 | 正數(shù)前留空格 | printf “% d” 123 |
# | 特殊格式(如0x前綴) | printf “%#x” 255 |
2. 寬度(width)
指定最小字段寬度,不足時填充
實例
printf “%10sn“ “hello” ?# 右對齊,寬度10
printf “%-10sn“ “hello” # 左對齊,寬度10
printf “%-10sn“ “hello” # 左對齊,寬度10
3. 精度(.precision)
對于浮點數(shù),指定小數(shù)點后位數(shù);對于字符串,指定最大字符數(shù)
實例
printf “%.2fn“ 3.14159 ?# 輸出 3.14
printf “%.5sn“ “abcdefg” # 輸出 abcde
printf “%.5sn“ “abcdefg” # 輸出 abcde
四、實用示例
示例1:基本格式化輸出
實例
printf “Name: %s, Age: %d, Height: %.2fn“ “Alice” 25 1.68
輸出:
Name: Alice, Age: 25, Height: 1.68
示例2:表格對齊輸出
實例
printf “%-10s %-10s %-10sn“ “Name” “Age” “Score”
printf “%-10s %-10d %-10.2fn“ “Alice” 25 89.5
printf “%-10s %-10d %-10.2fn“ “Bob” 23 92.3
printf “%-10s %-10d %-10.2fn“ “Alice” 25 89.5
printf “%-10s %-10d %-10.2fn“ “Bob” 23 92.3
輸出:
Name Age Score Alice 25 89.50 Bob 23 92.30
示例3:特殊字符處理
實例
示例4:變量插入
實例
name=“John”
age=30
printf “User: %s, %d years oldn“ “$name“ “$age“
age=30
printf “User: %s, %d years oldn“ “$name“ “$age“
五、高級用法
1. 格式化日期輸出
實例
printf “Today is %(%Y-%m-%d)Tn“ -1
2. 顏色輸出
實例
3. 動態(tài)指定寬度
實例
width=20
printf “%*sn“ $width “Right aligned”
printf “%*sn“ $width “Right aligned”
六、常見問題與注意事項
換行問題:printf 默認(rèn)不添加換行符,需要手動添加 n
實例
printf “No newline”
printf “Add newlinen“
printf “Add newlinen“
參數(shù)數(shù)量不匹配:當(dāng)參數(shù)少于格式說明符時,會輸出未定義值
實例
printf “%s %sn“ “only_one” ?# 第二個%s會輸出空
引號處理:建議將格式字符串用雙引號括起來,變量也用雙引號
實例
printf “%sn“ “$variable“
特殊字符轉(zhuǎn)義:需要在格式字符串中使用反斜杠轉(zhuǎn)義特殊字符
七、printf vs echo
特性 | printf | echo |
---|---|---|
換行 | 需顯式添加n | 自動添加 |
格式化 | 支持復(fù)雜格式化 | 簡單輸出 |
一致性 | 各系統(tǒng)行為一致 | 不同系統(tǒng)可能有差異 |
變量擴展 | 需要顯式指定 | 自動擴展 |
特殊字符 | 需要轉(zhuǎn)義 | 部分版本支持-e選項 |
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END