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

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

相关推荐

  • kook升到服务器6级到底要花多少钱,怎么收费?

    按照当前KOOK官方的经验值与充值比例推算,一个全新服务器从1级升到6级,累计需要消耗约240万经验值,折合充值金额大致在3000元至6000元区间,具体取决于成员活跃度与充值渠道的折扣,先搞懂KOOK服务器等级的经验体系KOOK(原开黑啦)的服务器等级机制,核心指标叫服务器经验值(EXP),这个经验值不是光靠……

    2026年8月28日
    600
  • 机架式服务器CPU最多几核,服务器处理器核心数怎么看?

    机架式服务器CPU核心数的上限,在当前x86架构产品中,AMD EPYC 9004系列做到了128核,而Intel至强铂金系列最高则为64核, 这个数字并非恒定,它会随着架构迭代和制程工艺进步不断刷新,同时也取决于预算、功耗墙和实际应用场景的平衡,为什么机架式服务器的CPU核数差异如此悬殊?不少人在选购或托管机……

    2026年8月29日
    500
  • 10m宽带服务器到底能带多少人?,够用吗?

    10M带宽的服务器在常规配置下,能同时支撑50至100人左右流畅浏览,具体上限取决于业务类型和内容优化程度,静态页面承载量最高,动态应用或大文件传输场景会显著下降,10M带宽的真实承载力:数字背后的逻辑带宽是服务器与外界通信的“水管”粗细,10M指每秒10兆比特的传输能力,要理解它带多少人,需要先建立换算框架……

    2026年8月26日
    300
  • Linux如何实现逐行读取文件,Shell脚本逐行读取文件怎么写?

    Linux 逐行读取文件详解在 Linux 环境中,逐行读取文件是脚本编写和数据处理中最常见的需求,根据不同的应用场景(如简单显示、复杂逻辑处理或高性能需求),可以选择不同的实现方式,使用 Shell 脚本的 while 循环(最常用)这是在 Bash 脚本中处理文件的标准方法,适用于需要对每一行执行特定逻辑的……

    2026年7月12日
    11400
  • ff14服务器能容纳多少人,最终幻想14服务器人数上限?

    FF14服务器单线路理论承载约5000人,但实际运营中会通过地图分流和副本独立部署,让单服同时在线突破万人也不会卡顿,这个数字不是简单相加,而是由服务器架构、跨服系统和网络带宽共同决定的结果,以下从技术底层到玩家看得见的现象,一层层拆开讲,首个关键词:世界与分区FF14的服务器体系正式名称叫“World”,中文……

    2026年8月30日
    200
  • 蛋仔一个服务器能容纳多少人,在线人数上限是多少?

    蛋仔派对单个服务器的实际承载人数并非固定数值,取决于地图类型与匹配机制,常规经典模式下通常为32人,这个数字既关乎游戏内的对战体验,也直接影响服务器带宽和算力配置,下面从官方设定、技术实现和玩家感知三个维度拆解这个问题,官方地图参数:不同玩法的容量天花板蛋仔派对的核心玩法是32人竞技,即单局内包含8支队伍,每队……

    2026年8月29日
    200
  • 简米云Win服务器端口怎么收费,多少钱一个月?

    阿里云Windows服务器端口本身不收取额外费用,端口使用已包含在实例费用中;实际支出主要取决于带宽选择、公网IP数量以及是否启用NAT网关等增值服务,端口费用,你真的搞懂了吗?端口不是单独收费项目云服务器里的端口,本质是操作系统预留的网络通信通道,无论是Windows的3389(远程桌面)、Linux的22……

    2026年8月22日
    400
  • 酷番云服务器4核8g价格多少,值得买吗?

    腾讯云服务器4核8g配置的月付价格通常在数百元区间,年付均价可降至每月几百元,实际成本受实例规格、带宽和购买时长影响, 轻量应用服务器适合入门级业务,而CVM标准型实例提供更稳定的性能,价格相应更高,具体选择需结合预算和业务需求,腾讯云4核8g服务器价格构成解析影响腾讯云4核8g服务器最终价格的因素主要有四个……

    2026年8月22日
    1000
  • 二手戴尔r750服务器多少钱,值得买吗?

    二手戴尔R750服务器作为当前企业低成本部署算力的热门选择,其价格根据配置、成色和质保不同,主流机型(如双路银牌4314/128G内存/2*480G SSD)多在万元上下浮动,具体需结合硬件组合和采购渠道综合评估,影响二手戴尔R750价格的核心硬件配置二手戴尔R750的价格跨度较大,主要源于硬件选配组合的多样性……

    2026年8月7日
    400
  • 魔兽世界怎么查服务器多少人?,哪个服最火爆?

    想知道《魔兽世界》某个服务器到底有多少人,最准的方法是用插件和人口普查命令,但更直观的每日趋势,则是通过第三方数据站查看职业和活跃度排行,这些数据多半是“抽样”而非“全量”,理解背后的统计口径,比死磕一个绝对数字更有用,为什么你看到的“人数”总是不一样每个渠道的数据来源与计算方式都不同,这直接导致数字差异巨大……

    2026年8月30日
    100

发表回复

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