Linux中Heredoc写多行内容需注意三点:选对标记、控制变量与命令展开、留意格式;cat > log.txt后接标记,标记加引号则不展开,不加则展开。

Linux中用Shell的Heredoc(Here Document)写多行内容,核心就三件事:选对标记、控制展开、注意格式。
基础写法:用cat 快速输出或存文件
最常用形式是:cat 后换行输入内容,最后独占一行写<code>EOF。
- 结尾的
EOF必须顶格、不能有空格或制表符,后面也不能跟任何字符 - 标记名不一定要叫
EOF,换成CONFIG、SQL也完全合法 - 想把内容写进文件?加重定向就行:
cat config.txt - 想追加内容?用
>>:cat > log.txt
变量和命令要不要展开?看引号怎么加
标记名是否加引号,直接决定里面的内容会不会被shell解析:
cat → 变量<code>$HOME、命令$(date)都会执行并替换cat → 所有内容原样输出,<code>$PATH、`ls`、\t全当普通字符cat 效果同单引号,不推荐,因为双引号在heredoc里没实际意义
写脚本时想缩进?用自动删前导Tab
在if、for或函数里写heredoc,为了对齐代码常会缩进。这时用能自动去掉每行开头的Tab(注意:只认Tab,空格不行):
- 内容行前面可以有Tab,它们不会出现在最终输出里
- 结束标记也可以带Tab缩进,但必须和内容行用同样的Tab方式
- 例子:
cat 开头,结尾写<code> EOF(前面四个Tab)是可以的
常见用途不只是cat:还能喂命令、建配置、跑SQL
heredoc本质是把多行文本当标准输入传给任意命令:
- 初始化MySQL:
mysql -u root -p 后面接<code>CREATE TABLE...再SQL - 自动sftp操作:
sftp user@host 接<code>put file.txt、quit - 生成配置文件:
sudo tee /etc/myapp.conf 配合<code>CONF结束,安全又清晰


















