printf:printf 是一个常用的 shell 命令,用于格式化输出。它类似于 C 语言的 printf 函数,可以通过格式指定符控制输出内容的格式。
一、语法
printf FORMAT [ARGUMENT]...
主要特点
- 无需换行:printf 默认不会自动在输出末尾添加换行符,需要手动指定。
- 格式化输出:通过指定 FORMAT 可以控制输出的对齐、精度、宽度等。
二、常用的说明符
格式符 | 含义 | 示例 |
%s | 字符串 | printf "%s\n" "hello" 输出 hello |
%c | 单个字符 | printf "%c\n" 65 输出 A |
%d | 十进制整数(有符号) | printf "%d\n" 42 输出 42 |
%u | 十进制整数(无符号) | printf "%u\n" 42 输出 42 |
%o | 八进制整数 | printf "%o\n" 42 输出 52 |
%x | 十六进制整数(小写字母) | printf "%x\n" 42 输出 2a |
%X | 十六进制整数(大写字母) | printf "%X\n" 42 输出 2A |
%f | 浮点数 | printf "%.2f\n" 3.14159 输出 3.14 |
%e | 科学计数法(小写 e) | printf "%e\n" 12345.678 输出 1.234568e+04 |
%E | 科学计数法(大写 E) | printf "%E\n" 12345.678 输出 1.234568E+04 |
%% | 输出百分号 % | printf "%%\n" 输出 % |
三、修饰符
可以结合格式符使用的修饰符包括:
- 宽度控制
修饰符 | 含义 | 示例 |
%-WIDTHs | 左对齐,占用指定宽度 | `printf " |
%WIDTHs | 右对齐,占用指定宽度 | `printf " |
- 精度控制
修饰符 | 含义 | 示例 |
%.PRECISIONs | 输出字符串时,最多显示指定字符数 | printf "%.3s\n" "hello" 输出 hel |
%.PRECISIONf | 浮点数保留指定小数位 | printf "%.2f\n" 3.14159 输出 3.14 |
- 填充控制
修饰符 | 含义 | 示例 |
%0WIDTHd | 用零填充至指定宽度 | printf "%05d\n" 42 输出 00042 |
% WIDTHd | 默认用空格填充至指定宽度 | printf "%5d\n" 42 输出 42 |
- 转义序列
printf 支持以下常用的转义序列:
转义序列 | 含义 | 示例 |
\n | 换行 | printf "Hello\nWorld\n" 输出两行 |
\t | 制表符 | printf "Hello\tWorld\n" 输出 Hello World |
\\ | 反斜杠 | printf "\\n\n" 输出 \n |
\b | 退格符 | printf "Hello\b\bWorld\n" 输出 HelWorld |
\r | 回车 | printf "123\rABC\n" 输出 ABC |
四、示例
- 格式化字符串
printf "Name: %s, Age: %d\n" "Alice" 25
输出:
Name: Alice, Age: 25
- 控制宽度和对齐
printf "|%-10s|%10d|\n" "Item" 123
输出:
|Item | 123|
- 浮点数格式化
printf "PI: %.2f\n" 3.14159
输出:
PI: 3.14
%.2f 表示保留两位小数。
- 输出对齐表格
printf "|%-10s|%10s|\n" "Name" "Score"
printf "|%-10s|%10d|\n" "Alice" 95
printf "|%-10s|%10d|\n" "Bob" 88
输出:
|Name | Score|
|Alice | 95|
|Bob | 88|
- 自动重复格式符
printf "|%s|\n" "One" "Two" "Three"
输出:
|One|
|Two|
|Three|