echo:简单输出
echo "hello"
echo "name: $name"
echo -n "no newline" # 不加结尾换行
echo -e "tab:\tnewline:\n" # 启用转义
echo "$(date)" # 命令替换
echo 常用转义(需 -e)
| 序列 |
含义 |
\n |
换行 |
\t |
Tab |
\\ |
反斜杠 |
\033[31m \033[0m |
ANSI 颜色(红 / 重置) |
echo -e "\033[31mRED\033[0m and normal"
printf:精确格式化
printf 像 C 的 printf——格式更可控,跨 shell 行为一致。
printf "hello\n"
printf "name: %s\n" "alice"
printf "name: %s age: %d\n" "alice" 30
printf "pi = %.4f\n" 3.14159265
printf "%-10s %s\n" "Name:" "Alice" # 左对齐 10 宽
printf "%5d\n" 42 # 右对齐 5 宽
printf "%05d\n" 42 # 0 填充 5 位
printf "%x\n" 255 # 十六进制 → ff
printf "%o\n" 8 # 八进制 → 10
格式说明符
| 符 |
含义 |
%s |
字符串 |
%d %i |
整数 |
%f |
浮点 |
%.Nf |
N 位小数 |
%-Ns |
左对齐 N 宽 |
%Ns |
右对齐 |
%0Nd |
0 填充 |
%x %X |
十六进制 小 / 大写 |
%% |
字面 % |
多组参数会重用格式
printf "%-10s %s\n" Name Alice Age 30 City NY
# Name Alice
# Age 30
# City NY
表格输出
printf "%-10s %-5s %-15s\n" "Name" "Age" "Job"
printf "%-10s %-5s %-15s\n" "Alice" "30" "Engineer"
printf "%-10s %-5s %-15s\n" "Bob" "25" "Designer"
echo vs printf 选哪个
| 场景 |
用 |
| 简单一行 |
echo |
| 含变量 / 简单文本 |
echo |
| 精确格式 / 表格 |
printf |
| 跨平台脚本(避免 echo 差异) |
printf |
| 带特殊字符(如换行) |
printf |
echo 在不同 shell 行为不一致(特别是 -e / -n);正经脚本优先 printf。
坑
- echo
-e 不是所有 shell 默认开——dash 默认不开
- echo "" 和 echo "$var" 不同——后者展开变量
- printf 必须有
\n 才换行——echo 默认换行
- shell 内置和外部命令的 echo 行为略不同(
/bin/echo vs bash 的)