linux here是什么?,linux常用命令有哪些?

Linux Here文档(Here Document)是在Shell脚本内嵌入多行输入的标准方式,它以<<操作符加上定界符定义内容块,既可直接读写文件,也能将多段数据传递给命令,显著简化自动化运维脚本的编写。

linux here 文档是什么?一文读懂定义与用法

在编写Shell脚本时,经常需要向命令传递多行输入或生成包含多行内容的文件,Linux Here文档(又称Here Document)正是解决该需求的原始方法,它不需要单独创建文件或使用多条echo命令,只要在命令行或脚本中划定一个区块,区块内的所有行都会作为标准输入传递给对应命令。

常用的Linux命令介绍:13个基本命令和Shell脚本编程
加载中
常用的Linux命令介绍:13个基本命令和Shell脚本编程

标准语法与核心定界符

基本格式:

command << DELIMITER
此处是您需要传递的文本内容
可以包含多行
DELIMITER

关键规则:定界符(如EOF、END)必须成对出现,开头的<<后紧跟定界符,结尾的定界符必须单独成行且顶格写,社区共识中,最常用的定界符是EOF,但任何不包含特殊符号的字符串都可行,例如CONFIG_END、SQL_BLOCK。

定界符加引号后的行为差异

业内专家指出,给起始定界符加上单引号或双引号是控制变量展开和命令执行的核心技巧。

  • 无引号:Shell会解析区块内的$变量和`命令`,适合需要动态替换的场景。
  • 单引号(<< 'EOF'):所有内容视为字面字符串,不解析变量和反引号,适合保留模板原样。
  • 双引号与单引号效果相同,但更推荐单引号以保证清晰。

示例对比:

# 工厂化场景:动态生成带变量的配置文件
cat << EOF > /etc/myapp.conf
server_name=${HOSTNAME}
port=8080
EOF
# 安全场景:生成含$符号的文本,不担心被替换
cat << 'EOF' > /tmp/example.txt
The cost is $100, no substitution here.
EOF

linux here 脚本场景:三个典型案例详解

Here文档的最大价值在于减少外部文件依赖、提升脚本可移植性,以下场景是社区公认的高频应用,每一个都可在现有生产环境中直接验证。

linux here是什么?,linux常用命令有哪些?

自动化配置文件生成

运维人员常需在部署脚本里生成Nginx、MySQL或自定义应用的配置,Here文档能将配置块直接嵌入脚本。

操作路径:

#!/bin/bash
cat > /etc/nginx/sites-available/default << 'NGINX_CONF'
server {
    listen 80;
    root /var/www/html;
    index index.html;
}
NGINX_CONF
  • 脚本执行后自动创建目标文件,无需额外复制。
  • 定界符NGINX_CONF加引号,避免符号干扰。
  • 如需动态更改变量(如端口号),则不加引号并直接引用Shell变量。

多行消息输出与交互式输入

向用户展示完整帮助文档,或向工具传递多选项输入时,Here文档是最简洁的形式。

示例:批量创建用户(模拟交互输入)

sudo newusers << END
user1:1000:1000:User One:/home/user1:/bin/bash
user2:1001:1001:User Two:/home/user2:/bin/bash
END

newusers命令从标准输入读取行,Here文档一行一个用户配置,无需手动创建临时文件。

数据库SQL脚本批量执行

在云服务器初始化脚本中,常用Here文档直接向数据库发送多条SQL语句。

mysql -u root -p$DB_PASS << 'SQL'
CREATE DATABASE IF NOT EXISTS myapp;
GRANT ALL ON myapp. TO 'appuser'@'localhost' IDENTIFIED BY 'secret';
FLUSH PRIVILEGES;
SQL
  • 定界符SQL加引号,确保$DB_PASS变量提前由Shell替换,其他内容原样传递。
  • 整个区块清晰表达了数据库操作的逻辑顺序。

linux here 命令与重定向对比:区别与适用场景

初学者常混淆Here文档和输入重定向(<)、Here字符串(<<<),三者在功能上相似,但适用场景和机制有明确分工。

Here文档 vs 输入重定向

linux here是什么?,linux常用命令有哪些?

特性 Here文档 (<< DELIM) 输入重定向 (< file)
输入来源 脚本内部定义的多行内容 外部已存在的文件
可维护性 脚本自包含,无需附加文件 依赖相对路径,部署时需确保文件存在
变量扩展 支持开关(通过引号控制) 无扩展,完全读取文件原内容
典型场景 临时生成配置、SQL脚本、帮助文本 读取已有日志、数据文件

选择建议较长且与脚本逻辑紧耦合时,用Here文档;当内容由其他工具管理或会被多脚本共用时,坚持使用外部文件配合输入重定向。

Here文档 vs Here字符串

Here字符串(<<<)仅用于向命令传递单行字符串,并附加一个换行符,两者适用边界清晰:

  • 单行简短变量或文字 → Here字符串(grep 'pattern' <<< "$var")
  • 多行数据块或自由格式 → Here文档(cat << EOF ... EOF)

行业共识认为,Here文档在处理多行文本时是语法最清晰的选择,尤其适合脚本阅读者快速理解数据块的边界。

常见陷阱与专业技术要点

即使简单操作,也有让新手困惑的细节,以下四个问题在Stack Overflow的高票回答中反复出现。

定界符必须独立成行且无前导空白

错误的写法(定界符前有空格或TAB):

cat << EOF
some text
  EOF   # ← 这里多了一个空格,Shell不会识别为结束符

正确做法:结尾定界符必须顶格,前导的任何空格或TAB都会导致Shell继续读取直到在单独一行找到完全匹配的字符串。

定界符与内容重复导致意外终止

如果Here文档内的文本恰好包含与定界符完全相同的行(例如在文档中讨论EOF这个词),脚本会提前结束。防御策略:无关的独特定界符,如_EOF_、HEREDOC_END。

  • 大型脚本中使用组合定界符,例如MYBLOCK_001。

变量替换副作用:美元符号被意外解析

当脚本包含密码、私钥等含字符的文本时,必须使用单引号包围定界符,例:

linux here是什么?,linux常用命令有哪些?

ssh-keygen -t rsa -b 4096 -f /tmp/test -N '' << 'EOF' EOF

没有引号时,会被Shell当作变量前缀,可能导致预期外的替换或错误。

空行与缩进处理

默认情况下,Here文档保留所有空白字符,包括缩进和空行,如果希望消除脚本结构中的缩进,可以使用<<-(注意是减号)让Shell忽略前导TAB字符。

cat <<- END
    this line is preceded by a tab
    this line also
END

注意只对TAB生效,对空格无效,该特性在缩进风格严格的脚本中很常见,但不及普通定界符通用。

linux here 的常见问题解答

在嵌套脚本中使用linux here文档,如何避免定界符冲突?

选择层级编号式定界符,例如在外层脚本使用BLOCK1,内层使用BLOCK1_INNER,同时始终坚持在嵌套调用中对内层定界符加单引号,避免外层Shell变量错误替换内层内容。

linux here文档能否在一条命令中同时写入多个文件?

可以,借助tee命令将Here文档内容同时分发到多个目标:

tee file1 file2 file3 << EOF > /dev/null
这是同时写入三个文件的相同内容
EOF

tee的写入路径参数紧跟其后,> /dev/null抑制其在标准输出上的额外打印。

为什么我写的脚本在部分Linux发行版上执行失败,但本机正常?

大概率是默认Shell不同所致,Here文档是Bourne Shell(sh)和Bash共有的特性,但某些嵌入式系统或最小化安装环境默认使用Dash作为/bin/sh,Dash对Here文档的解析严格,尤其对<<-的支持不如Bash完整,解决方法是在脚本第一行指定解释器:#!/bin/bash或#!/bin/dash,并测试定界符是否顶格,确保脚本头清晰,避免依赖不可移植的扩展语法。

Linux Here文档并不是新鲜概念,但它仍是在脚本中嵌入原始数据最直接、可审计性最强的工具,熟练掌握定界符的选择、引号对变量展开的影响以及嵌套场景的排除技巧,能帮助你在自动化部署、初始化配置等任务中编写出更健壮且易于维护的Shell脚本。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/498806.html

赞 (0)
网站关闭CDN有什么影响,网站关闭CDN后网站速度变慢如何解决
上一篇 2026年7月16日 13:01
cf_cdn加速是什么意思?cf_cdn加速效果如何提升
下一篇 2026年7月16日 13:09

相关推荐

  • 服务器宽带20m可以承受多少人

    20M带宽的服务器,在典型网页应用场景下,大约能同时支撑200-300人进行常规浏览,但实际数字受业务类型、并发模型和优化程度影响,需要具体测算,影响20M带宽承载人数的关键因素带宽的单位与真实速度20M带宽指的是20Mbps,即每秒传输20兆比特,换算成字节约为2.5MB/s,这个速度是所有用户共享的,每个用……

    2026年8月24日
    400
  • 服务器硬盘300g多少钱?选购时看哪些参数?

    300G服务器硬盘的价格不像手机那么透明,它更像一个“看人下菜碟”的配件:二手SAS 300G 10K拆机盘多数在百元上下,全新企业级SATA 300G普遍在200-400元区间,具体高低取决于接口、转速、新旧程度和购买渠道,300G服务器硬盘的价格由什么决定接口类型:SAS和SATA是两条路一块300G硬盘……

    2026年9月21日
    100
  • 华为服务器CPU晶体管集成多少,性能如何?

    华为服务器CPU中,鲲鹏920处理器集成了约60亿个晶体管,这一数据在华为官方发布及多家行业分析机构的公开资料中均有明确记载,这个数字不仅体现了华为在芯片设计领域的深厚积累,更直接决定了服务器在高性能计算、云计算与大数据场景下的实际表现,从晶体管规模到架构设计,再到数据中心选型的实际考量,逐一拆解,华为服务器C……

    2026年9月17日
    200
  • 百度云服务器2m公网能支撑多少人访问,带宽够用吗

    2M公网带宽的云服务器,在合理优化下,大约能支撑50至100人同时在线访问,但实际并发数受页面资源大小、业务类型和架构设计影响显著,选择正规服务商并配合CDN可以进一步提升承载能力,这里的“同时在线”指的是用户在同一时间段内保持连接并发出请求,而非全部瞬间并发,日常运营中只要页面大小控制在100KB以内,配合静……

    2026年7月27日
    200
  • 百度网盘的服务器到底有多少T?,总容量是多少TB?

    百度网盘的服务器总容量是一个动态扩展的庞大数字,官方从未公布确切数值,但根据行业模型和公开数据估算,其实际物理存储总量已远超EB级别(1EB=1024PB),换算成TB则是一个至少七位数起步的规模,这个数字背后是分布式存储架构、多副本冗余机制以及持续扩容的数据中心集群共同支撑的结果,本文将从用户需求反推、技术架……

    2026年8月11日
    1900
  • 向日葵服务器IP地址是多少啊,在哪里查?

    向日葵没有一套对外公开的固定服务器IP,它的云端节点按地域和运营商动态调度,你此刻连接的真实IP,与半小时前的IP大概率不是同一个, 下面说清原理、教你自己查的方法,以及企业用户更关心的固定IP替代方案,为什么向日葵服务器没有固定IPCDN调度下的动态节点向日葵的传输走的是多级智能路由,当你发起远程控制时,软件……

    2026年9月25日
    100
  • Linux如何实现远程上传文件,Linux远程上传工具有哪些?

    实现Linux远程上传的核心在于选择合适的传输协议(如SSH、FTP、HTTP),通过scp、sftp、rsync或第三方图形化工具将本地文件安全地推送到远程服务器,Linux远程上传文件怎么操作在实际的运维和开发场景中,远程上传文件通常分为命令行操作和图形化界面操作,业内专家指出,对于习惯于终端操作的工程师……

    2026年7月13日
    2300
  • 服务器加内存一般多少钱,配置升级费用贵不贵?

    服务器加多少钱取决于配置升级幅度和机房资质,从每年几百元的入门款到每月数千元的企业级高配都有可能,多数中小型业务每年预算1500-6000元就能覆盖核心需求,服务器加多少钱,先拆解成本构成很多用户一上来就问“服务器一般加多少钱”,但这个问题本身缺少前提条件,服务器租赁的报价不是单一定价,而是由硬件配置、带宽资源……

    2026年8月31日
    300
  • 帕鲁服务器一套要多少钱?,帕鲁服务器租用价格参考

    一套帕鲁服务器(幻兽帕鲁专用云服务器)的价格通常在100元至500元/月之间,具体取决于玩家数量、CPU性能、内存大小和带宽配置,很多朋友入坑《幻兽帕鲁》之后,发现官方服务器卡顿、延迟高,甚至动不动就回档,于是开始考虑自己开一个服务器,但网上一搜,价格从几十块到上千块都有,看得人眼花缭乱,今天咱们就把这“多少钱……

    2026年9月16日
    100
  • 服务器1gb宽带能承受多少人访问,带宽不够怎么解决?

    服务器1Gbps带宽能承载多少人,核心结论是:对于普通企业网站,理论上可支撑数千人同时在线,但实际并发数取决于页面大小、应用类型及用户行为,不能简单用固定数字概括,咱们今天就来拆解这个问题,很多站长看到“1Gbps”觉得很高,但实际运营中,有人几百人卡顿,有人上万人流畅,关键就在于你如何理解“带宽”和“并发”之……

    2026年8月24日
    600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注