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 的)