Linux printf命令详解

1. 简介与语法

printf 是 Linux 下强大的格式化输出命令,功能与 C 语言的 printf() 函数类似,能精确控制文本、数字的显示格式。

基本语法:

bash

复制代码
printf FORMAT [ARGUMENT]...

FORMAT 即格式字符串,控制输出样式;ARGUMENT 是被格式化的数据。printf 默认不会在输出末尾自动添加换行符。

主要优势:

  • 精确控制输出格式 :宽度、精度、对齐、数据类型转换等;
  • 处理多种数据类型 :整数、浮点数、字符串、特殊字符等;
  • echo 更灵活可靠 :尤其适合脚本开发、生成报告或日志。

2. 格式化说明符

说明符 描述 示例(输出)
%s 字符串 printf "%s\n" "Hello" → Hello
%d, %i 十进制整数 printf "%d\n" 42 → 42
%f 浮点数 printf "%f\n" 3.14159 → 3.141590
%.2f 浮点数(两位小数) printf "%.2f\n" 3.14159 → 3.14
%e, %E 科学计数法 printf "%e\n" 1000 → 1.000000e+03
%x, %X 十六进制整数 printf "%x\n" 255 → ff
%o 八进制整数 printf "%o\n" 8 → 10
%c 单个字符 printf "%c\n" "ABC" → A
%% 输出百分号 % printf "%%\n" → %
%b 对参数中的转义字符进行解析 printf "%b\n" "Hello\nWorld"

%b 会将参数中的 \n、\t 等转义字符进行解析,而普通的 %s 则不会。


3. 转义字符

转义序列 含义 说明
\n 换行符 将光标移至下一行开头
\r 回车符 将光标移至当前行开头
\t 水平制表符 用于对齐文本
\v 垂直制表符 将光标移至下一行(同列)
\b 退格符 删除前一个字符
\a 报警符 触发系统的报警声
\ 反斜杠 输出 \ 本身
" 双引号 输出 " 本身
\f 换页符 将光标移至下一页开头
\e Escape 字符 ASCII 码 27(ESC)
\c 强制结束输出 后续内容不再输出
\0NNN 八进制字节 由 1 至 3 位八进制数表示
\xHH 十六进制字节 由 1 至 2 位十六进制数表示
\uHHHH Unicode 字符 4 位十六进制值
\UHHHHHHHH Unicode 字符 8 位十六进制值

这些转义序列均直接应用于 FORMAT 字符串中。


4. 格式修饰符

除了基本的说明符,还可以添加修饰符以更精细地控制输出:

修饰符 作用 示例
宽度 在说明符中指定最小字符宽度 %10s → 宽度至少 10 个字符,右对齐
- 左对齐(默认右对齐) %-10s → 宽度 10,左对齐
精度 控制字符串最大长度或小数位数 %.2f → 保留两位小数 %.5s → 最多输出 5 个字符
组合 同时指定宽度和精度 %8.2f → 总宽 8,保留 2 位小数
0 用 0 填充空白(仅对数值有效) %05d → 数字宽度至少 5 位,不足补 0
* 从参数中动态获取宽度和精度 %*.*f → 宽度和精度由参数提供

这些修饰符为创建对齐表格、控制数值显示等复杂输出提供了极大的灵活性。


5. 常用选项

选项 功能描述
-v VAR 将格式化后的输出赋值给变量 VAR,而非打印到屏幕
--help 显示帮助信息并退出
--version 显示版本信息并退出

-v 选项在脚本中非常实用,可将格式化的文本存入变量,供后续使用。


6. 实用示例

① 基本输出

bash

复制代码
printf "Hello, %s!\n" "World"

输出:Hello, World!

② 格式化字符串(表格对齐)

bash

复制代码
printf "%-10s %-8s %-4s\n" "姓名" "性别" "体重(kg)"
复制代码
printf "%-10s %-8s %-4.2f\n" "杨过" "男" 68.6543

输出:

姓名 性别 体重(kg)
杨过 68.65

%-10s 表示宽度至少 10 且左对齐,%-4.2f 表示总宽至少 4、小数部分取 2 位。

相关推荐
扛枪的书生2 小时前
Linux 网络管理器用法速查
linux
SkyWalking中文站4 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
顺风尿一寸5 小时前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
雪梨酱QAQ7 小时前
Kubeneters HA Cluster部署
运维
江华森11 小时前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森11 小时前
Matplotlib 数据绘图基础入门
运维
XIAOHEZIcode11 小时前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
江华森11 小时前
NumPy 数值计算基础入门
运维
唐青枫13 小时前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao2 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80