Shell printf 命令
printf
是一个用于格式化输出的 Shell 内置命令,其语法借鉴于 C 语言的printf()
函数。
与echo
命令相比,printf
命令提供更精确地输出控制,不会自动添加换行符,且具有更好的可移植性。
✅ 基本语法:
printf format [argument...]
✅ 常用选项:
format
:格式字符串,它定义了最终输出的样子。argument
:参数列表,是要被格式化和插入到format
中的数据。参数的数量应与格式说明符的数量匹配。
格式说明符
格式说明符是printf
命令的核心,它定义了如何格式化输出。每个格式说明符以%
开头,后面跟随一个或多个字符来指定格式。
✅ 下面是常用的格式说明符:
说明符 | 描述 | 示例 | 输出 |
---|---|---|---|
%s |
格式化一个字符串,并将其输出 | printf "%s" "hello" |
hello |
%d |
格式化一个整数(十进制),并将其输出 | printf "%d" 123 |
123 |
%i |
格式化一个整数(同 %d),并将其输出 | printf "%i" 123 |
123 |
%f |
格式化一个浮点数,并将其输出 | printf "%f" 3.14 |
3.140000 |
%x |
格式化一个整数为十六进制数(小写字母),并将其输出 | printf "%x" 255 |
ff |
%X |
格式化一个整数为十六进制数(大写字母),并将其输出 | printf "%X" 255 |
FF |
%o |
格式化一个整数为十六进制数,并将其输出 | printf "%o" 64 |
100 |
%c |
将后续提供的整数参数,解释为一个字符的 ASCII 码,并输出该码对应的字符 | printf "%c" 65 |
A |
%b |
解释转义序列的字符串,并将其输出 | printf "%b" "a\nb" |
a(换行)b |
%q |
将字符串进行转义和引用,使其成为安全的 Shell 输入,并将其输出 | printf "%q" "a b" |
a\ b |
%% |
百分号字符,并将其输出 | printf "%%" |
% |
转义序列
转义序列是以反斜杠(\
)开头的特殊字符序列,用于表示一些不可见的字符或特殊字符。
✅ 以下是常用的转义序列:
序列 | 描述 | 示例 |
---|---|---|
\a |
警报(响铃) | printf "\a" |
\b |
退格 | printf "a\b" |
\f |
换页 | printf "\f" |
\n |
换行 | printf "a\nb" |
\r |
回车 | printf "a\rb" |
\t |
水平制表 | printf "a\tb" |
\v |
垂直制表 | printf "a\vb" |
\\ |
反斜杠 | printf "\\" |
\0NNN |
八进制值字符 | printf "\0101" → A |
\xHH |
十六进制值字符 | printf "\x41" → A |
重要特性与用法示例
1. 基本格式化
参数按顺序替换格式字符串中的%
说明符。
bash
复制
printf "Hello, %s! You have %d new messages.\n" "Alice" 5
输出结果:
Hello, Alice! You have 5 new messages.
2. 重复使用格式字符串
可以在格式字符串中多次使用同一个格式说明符,参数会按顺序替换。
bash
复制
printf "%s %s\n" a b c d
输出结果:
a b
c d
3. 指定参数位置(Bash 4.3+)
可以在格式字符串中多次使用同一个格式说明符,参数会按顺序替换。
bash
复制
printf "%2$s %1$s\n" "World" "Hello"
输出结果:
Hello World
4. 数组元素输出
可以使用数组元素作为参数进行格式化输出。
bash
复制
fruits=("Apple" "Banana" "Cherry")
printf "Fruit: %s\n" "${fruits[@]}"
输出结果:
Fruit: Apple
Fruit: Banana
Fruit: Cherry
5. 日期时间格式化
可以使用date
命令结合printf
来格式化输出当前日期和时间。
bash
复制
printf "%(%Y-%m-%d %H:%M:%S)T\n" -1
输出结果:
2025-08-23 12:30:45
6. 不同进制之间转换
可以使用date
命令结合printf
来格式化输出当前日期和时间。
bash
复制
number=255
printf "Decimal: %d\n" $number
printf "Hex: 0x%x\n" $number
printf "Octal: 0%o\n" $number
printf "Binary: " && echo "obase=2; $number" | bc
输出结果:
Decimal: 255
Hex: 0xff
Octal: 0377
Binary: 11111111
7. 按照表格样式输出
可以使用date
命令结合printf
来格式化输出当前日期和时间。
bash
复制
# 表头
printf "%-15s %-10s %-10s\n" "Name" "Age" "Score"
printf "=================================\n"
# 数据行
printf "%-15s %-10d %-10.2f\n" "Alice" 25 95.5
printf "%-15s %-10d %-10.2f\n" "Bob" 30 88.75
printf "%-15s %-10d %-10.2f\n" "Charlie" 28 92.33
输出结果:
Name Age Score
=================================
Alice 25 95.50
Bob 30 88.75
Charlie 28 92.33
评论区 0
发表评论
教程介绍
Linux 是一个开源、稳定、多用途的操作系统内核,广泛应用于服务器、云计算和嵌入式设备。
26
章节
20
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈