Linux怎么使用heredoc语法_Linux如何在脚本中写入多行文本【方法】

陌枫酱_2535

陌枫酱_2535

2026-03-22

841人浏览

原创

heredoc基本写法:用

linux怎么使用heredoc语法_linux如何在脚本中写入多行文本【方法】

heredoc 基本写法:用

Linux shell 脚本里写多行文本,heredoc 是最干净的方案,不用反复拼接 \n 或调多行 echo。关键就两点:起始用 ,结尾独占一行写完全相同的 <code>标记名。

常见错误是结尾标记前后有空格、tab 或其他字符——哪怕一个空格,shell 就不认,会一直等你输下去,直到超时或手动 Ctrl+D。

  • 标记名可以是任意字母数字组合(推荐全大写,比如 EOF),但不能含空格或特殊符号
  • 如果标记名不加引号,变量和命令会被展开;加单引号()则原样输出,不解析任何东西
  • 结尾标记必须顶格写,前面不能有任何空白字符
cat <h3>避免变量意外展开:单引号包裹结束标记最保险</h3><p>脚本里写配置文件模板、SQL 片段或 YAML 内容时,常需要保留 <code>$</code>、<code>`</code> 这类字符原样输出。不加引号的 <code> 会把所有变量和命令替换掉,导致生成内容错乱。</code></p><p>比如写一段 Nginx 配置,里面带 <code>$host</code> 或 <code>$1</code>,不加引号就直接被 shell 当成变量去求值,结果变成空或报错。</p>
  • 用 (单引号包住标记名)可彻底禁用展开,所有内容按字面量处理
  • 若只需局部禁用,也可混用:先用未加引号的 heredoc,再在需要的地方转义,比如 \$HOME
  • 注意:单引号只影响结束标记本身,heredoc 内容里的单引号不受影响
cat <h3>嵌入命令或条件逻辑:heredoc 里也能执行 shell 语句</h3><p>heredoc 不只是“贴文本”,只要不加引号,里面的命令替换(<code>$(...)</code>)、算术扩展(<code>$((...))</code>)、甚至简单的 <code>if</code> 判断都能运行——前提是这些结构出现在未加引号的 heredoc 中。</p><p>典型场景是生成带动态值的部署脚本、临时配置或测试数据。但要注意:命令执行发生在 heredoc 解析阶段,不是写入后才运行。</p>
  • 所有 $(...) 在重定向前就执行完毕,结果直接写入目标(如文件或管道)
  • 不能在 heredoc 里写交互式命令(如 read),因为输入流已被重定向
  • 如果要拼接多段逻辑,建议把复杂判断提到 heredoc 外,用变量承接后再插入,更易读也更可控
LOG_DIR="/var/log/myapp"
cat  /tmp/deploy.sh
#!/bin/bash
echo "Deploying to $(hostname)"
mkdir -p $LOG_DIR
echo "Log dir: $LOG_DIR"
EOF

重定向到文件 vs 管道:权限、覆盖与追加要分清

heredoc 本身不决定写入行为,真正控制落盘的是它前面的重定向操作符。写错一个符号,可能覆盖重要文件,也可能静默失败。

最常见问题是用 > 覆盖了不该动的文件,或者忘了加 sudo 导致写入失败却没报错(尤其往 /etc/ 下写时)。

  • cat file.txt:覆盖写入,文件不存在会新建,存在则清空重写
  • cat > file.txt:追加写入,适合日志或配置拼接
  • sudo tee file.txt :绕过 shell 重定向权限限制,适合写系统级配置
  • 用 tee 时别漏掉 -a 参数,否则仍是覆盖

heredoc 的本质是提供一块“输入流”,怎么用它,取决于你把它连给谁——cat、sudo tee、mysql 还是自定义程序,行为完全不同。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.04

12600

5

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

1023

5

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

2025.06.11

7370

9

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.07

2902

7

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3830

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3293

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2433

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5850

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5502

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习