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 位。

相关推荐
镜子AI8 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
tianyuanwo8 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
HideF8 小时前
Linux sudo
linux
FlightYe9 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎9 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
知已难寻10 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning11 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
牛马鸡niumasi11 小时前
【Linux】C语言文件操作
linux
say_fall11 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii12 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器