Bash写入多行文本到文件的方法

更新于 2025-10-06

在日常 Bash 脚本或命令行操作中,常常需要将多行文本写入到文件,比如生成配置文件、批量输出日志、自动化脚本等。
本文将详细介绍几种常用的 Bash 写入多行文本的方法,并重点讲解 Here Document 的用法和原理。


常见写入多行文本的方法

Here Document(推荐)

Here Document 是 Bash 用于向命令或文件传递多行文本的强大工具,语法简洁,功能丰富。用法如下:

cat <<EOF > filename.txt
第一行内容
第二行内容
第三行内容
EOF
  • <<EOF 表示开始 Here Document,EOF 是结束标识符,可以自定义为其他字符串(如 ENDTXT),但前后一致即可。
  • > 表示覆盖写入,>> 表示追加写入。
  • EOF 和结束标识符之间的内容将全部写入文件(或传递给命令)。

Here Document 详细说明

变量替换和转义

Here Document 支持变量和命令替换:

name="Alice"
cat <<EOF
Hello, $name!
EOF

输出内容为:Hello, Alice!

如果希望内容原样输出(禁用变量和转义),可以为结束标识符加单引号:

cat <<'EOF'
Hello, $name!
EOF

输出内容为:Hello, $name!

追加写入

cat <<EOF >> filename.txt
追加内容
EOF

作为命令输入

Here Document 不仅可以写文件,还能作为命令的多行输入,例如:

mysql -u user -p <<EOF
SHOW DATABASES;
USE mydb;
SELECT * FROM users;
EOF

用于多行注释

Bash 没有多行注释,但可以借助 Here Document 达到类似效果:

: <<'COMMENT'
这里是
多行注释
COMMENT

: 是空命令,内容不会被执行,相当于注释。

注意事项

  • 结束标识符(如 EOF)必须独占一行且不能有前后空格。
  • 内容会保留原样,除非加了引号禁止变量替换和转义。
  • 可以与多种命令结合使用,不限于 cat

使用 echo 和换行符

echo -e "第一行内容\n第二行内容\n第三行内容" > filename.txt
  • -e 选项使 echo 支持转义字符(如 \n)。
  • 适合内容简单、格式明确的场景。

使用 printf

printf "第一行内容\n第二行内容\n第三行内容\n" > filename.txt
  • printf 语法与 C 类似,适合需要精确控制格式的场景。

多次 echo 追加

echo "第一行内容" > filename.txt
echo "第二行内容" >> filename.txt
echo "第三行内容" >> filename.txt
  • 首次使用 >,后续用 >> 追加。

总结与推荐

  • 如果需要写入格式化的多行文本,推荐使用 Here Document,语法清晰易维护,支持变量和命令替换。
  • 如果只是简单写几行,也可以用 echo 或 printf。
  • 多次 echo 适合逐行输出,灵活性高但不如 Here Document 简洁。
浙ICP备19039918号-1