heredoc是linux shell脚本中处理多行文本最干净可控的方式,用于配置、sql、yaml等场景;基础写法需严守命令、开始标记和结束标记三要素。

Linux Shell 脚本里写多行文本,heredoc 是最干净、最可控的方式。它不是“高级技巧”,而是日常脚本中处理配置、SQL、YAML 或交互输入的基础设施——用对了,省掉一堆 echo 和转义;用错了,脚本卡住、内容错乱、变量莫名消失。
基础写法:三要素必须守牢
heredoc 的骨架就三样:命令 + + 内容 + 独占一行的相同标记。缺一不可,错一点就失效。
- 标记名可任意取(如
CONFIG、SQL),但推荐全大写、无空格、无特殊字符 - 结尾标记必须顶格写——前面不能有空格或 Tab,后面不能跟任何字符(包括注释)
- 中间内容可以含换行、缩进、空行,原样保留(除非启用
)
变量与命令展开:引号决定一切
是否让 $VAR 或 $(cmd) 执行,只看结束标记有没有单引号。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
cat → 展开变量和命令,适合动态生成内容cat → 完全不展开,所有字符当字面量,适合写 Nginx 配置、正则、SQL 模板- 混用也行:比如大部分静态,只在某处插值,就用未加引号的 heredoc,再对个别符号转义,如
\$host
代码缩进友好:用 吃掉前导 Tab
写在 if 或函数里时,为了对齐逻辑,常需要缩进 heredoc 内容。这时 就派上用场。
- 每行开头的 Tab 字符会被自动删除,空格则保留(注意:不是空格,是 Tab)
- 结尾标记也可缩进,但必须用同样数量的 Tab,不能混用空格
- 终端显示
^I表示 Tab 被识别;若直接显示为空格,说明你按的是空格键,不生效
不止是 cat:喂给任何支持 stdin 的命令
heredoc 的本质是把多行文本变成标准输入流,所以能对接几乎所有命令。
- 初始化数据库:
mysql -u root -p 后接 <code>CREATE TABLE... - 自动化 sftp:
sftp user@host 后写 <code>put file.txt、quit - 调用 ed 编辑器:
ed file.txt 后写 <code>1,$s/old/new/g、w、q - 生成配置文件:
cat > /tmp/app.conf ,安全又清晰










