主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

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
发表评论