23、print 和 printf 格式化输出、echo 在终端或文件中输出文本

1、printf 命令

用于格式化并输出数据,它比更基础的 echo 命令更强大和稳定。

printf "格式字符串" [参数1] [参数2] ...
  • printf 不会自动添加换行符,除非你在格式字符串中明确使用 \n
    特性说明
    无自动换行 必须显式写 \n 才换行
    精确格式控制 支持 C 风格格式说明符(如 %s%d%6.2f
    无默认分隔符 完全由格式字符串控制布局

格式说明符 (Format Specifiers) 

说明符用途示例输出
%s 字符串 printf "%s\n" "Hello" Hello
%d 十进制整数 printf "%d\n" 25 25
%f 浮点数 printf "%f\n" 3.14 3.140000
%x 十六进制整数 printf "%x\n" 255 ff
%o 八进制整数 printf "%o\n" 8 10
%c 单个字符 printf "%c\n" 65 A
%b 解释反斜杠转义的字符串 printf "%b" "Hello\nWorld" Hello 换行 World
%q 以 Shell 可重用的格式输出 printf "%q" "A B" A\ B

常用转义序列 (Escape Sequences) 

序列作用
\n 换行 (Newline)
\t 制表符 (Tab)
\\ 反斜杠 (Backslash)
\0 空字符 (Null)
\" 双引号 (Double quote)
 如:
awk 'BEGIN { printf "|%-15s|\n", "Alice" }'  //将字符串左对齐,占用至少 15 个字符宽度,不足部分用空格填充

// 输出,"Alice"(5字符) + 10个空格 = 15字符,左对齐
|Alice          |           
部分含义
% 格式说明符开始标志
- 左对齐(默认是右对齐)
15 最小字段宽度为 15 个字符
s 表示参数是 字符串(string)

注:字符串超过最小宽度字符,不会截断! 字符串完整输出。宽度只是“最小值”,超长照常输出。

格式说明
%s 默认字符串(右对齐,无固定宽度)
%10s 右对齐,至少10字符
%-10s 左对齐,至少10字符
%.10s 最多输出10个字符(截断长字符串)
%10.10s 至少10字符,最多10字符(固定宽度,不足补空格,超长截断)

2、print 命令

print [item1, item2, ...]
  • 各项目之间用逗号分隔,输出时会被输出字段分隔符(OFS) 隔开,默认为空格。

  • 每条 print 语句执行后会自动添加换行符。

  • 如果 print 后面没有参数,省略表达式,默认输出 $0(整行)

    特性说明
    自动换行 每次 print 后自动添加 \n(换行符)
    字段分隔 多个表达式间用 OFS(Output Field Separator) 分隔,默认是空格
    简单直接 适合快速输出,无需格式控制

3、echo

用于将参数内容输出到标准输出(通常是终端)。它常用于显示消息、变量值、调试脚本或生成简单文本。

echo [选项] [字符串...]
  • 如果不带任何参数,echo 会输出一个空行。
  • 多个字符串之间用空格分隔,输出时自动以单个空格连接。
选项作用说明
-n 不输出末尾换行符 默认 echo 会在结尾加 \n-n 可取消
-e 启用反斜杠转义解释 如 \n\t\r 等(在 Bash 中默认不启用)
-E 禁用转义解释(默认行为) 多数系统默认如此

如:

echo Hello World
# 输出:Hello World

echo "Hello,    World"   # 引号内多个空格会被保留(但 echo 默认不解释转义)
# 输出:Hello,    World

常见转义序列(配合 -e):

  • \n:换行
  • \t:制表符(Tab)
  • \r:回车
  • \\:反斜杠
  • \a:响铃(beep)
  • \b:退格
# 没有 -e 选项,转义字符会被原样输出
echo "Hello\nWorld"
# 输出:Hello\nWorld(字面输出)

# 使用 -e 选项,转义字符生效
echo -e "Hello\nWorld"
# 输出:
# Hello
# World

echo -e "Tab\there"
# 输出:Tab    here(中间是制表符)

 

posted @ 2025-11-26 16:00  chao_xiong  阅读(39)  评论(0)    收藏  举报