06 · echo 与 printf

2026.10.08 · 🟢

目标:掌握两种输出命令,会做格式化表格和彩色输出

🎯 今天要带走的三件事

  1. echo 自动换行,printf 不自动换行但要手动写 \n
  2. echo -e 才解析转义,-n 不换行
  3. 复杂/可移植输出优先用 printf

一、echo 命令

echo 是 Shell 内置命令,用于输出文本或变量的值。四个用途:信息反馈、调试、交互界面、生成文件。

基本用法

echo "Hello, World!"          # 直接输出
name="Linux User"
echo "Welcome, $name!"        # 输出变量
echo This is a test           # 不带引号也行(但建议加引号)

常用选项

选项 作用
-n 不换行输出
-e 启用转义字符解析
echo -n "Loading..."
echo " Done!"                 # 输出:Loading... Done!

echo -e "First line\nSecond line"   # \n 生效,输出两行

常用转义序列(需 -e)

\n 换行 | \t 水平制表 | \v 垂直制表 | \b 退格 | \r 回车 | \\ 反斜杠

输出到文件

echo "内容" > output.txt      # 覆盖
echo "追加" >> output.txt     # 追加

彩色输出(ANSI 转义码)

echo -e "\033[31mRed Text\033[0m"
echo -e "\033[42;31m绿底红字\033[0m"
  • 前景色:30 黑 | 31 红 | 32 绿 | 33 黄 | 34 蓝 | 35 紫 | 36 青 | 37 白
  • 背景色:40~47 对应上述颜色
  • \033[0m 重置所有属性

输出命令结果

echo "Today is $(date)"

二、printf 命令 ⭐

printf(print formatted)源自 C 语言的 printf(),POSIX 标准定义,可移植性更好。

与 echo 的关键差异:printf 不自动加换行,要手动写 \n。

printf "format-string" [arguments...]

常用格式说明符

说明符 含义 示例输入 示例输出
%s 字符串 "text" text
%d 十进制整数 255 255
%f 浮点数 3.14159 3.141590
%.2f 2 位小数 3.14159 3.14
%c 单个字符 "A" A
%x 十六进制 255 ff
%o 八进制 255 377
%b 二进制 — —
%e 科学计数法 3.14159 3.141590e+00
%% 百分号本身 — %

格式化控制

printf "|%10s|\n" "right"     # 右对齐,宽 10: |     right|
printf "|%-10s|\n" "left"     # 左对齐:        |left      |
printf "Year: %04d\n" 23      # 前导零:        Year: 0023
printf "Pi: %.2f\n" 3.14159   # 精度:          Pi: 3.14

%-4.2f = 左对齐、宽度 4、保留 2 位小数。

实战:输出表格 ⭐

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

输出:

姓名     性别   体重kg
郭靖     男      66.12
杨过     男      48.65
郭芙     女      47.99

参数复用与缺省

printf %s abc def          # abcdef(format 被复用)
printf "%s %s %s\n" a b c d e f g h i j   # 自动按格式重复输出
printf "%s and %d \n"      # 无参数:%s→NULL,%d→0

三、echo vs printf 对比

维度 echo printf
换行 自动加 不加,需手动 \n
可移植性 因 shell 而异 POSIX 标准,更好
格式控制 无 宽度/精度/对齐齐全
适用 简单输出 表格、报表、结构化输出

🌙 今日作业

  • [ ] 用 printf 打印一张 3 行的对齐表格
  • [ ] 用 echo -e 输出一行红色文字

自测题

  1. printf "Hello" 会换行吗?为什么?
  2. %10s 和 %-10s 的区别?
  3. 为什么说可移植脚本建议用 printf 而不是复杂 echo?
👉 参考答案 1. 不会。printf 不自动加换行符,需手动写 `printf "Hello\n"`。 2. `%10s` 右对齐(不足左侧补空格);`%-10s` 左对齐(不足右侧补空格)。 3. 不同系统/Shell 的 `echo` 实现不一致(尤其 `-e`/`-n` 支持程度不同),而 printf 由 POSIX 定义,行为统一。

🔗 关联

Shell-学习总览|上一课 → 05-运算符|下一课 → 07-test命令与条件测试