You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash函数中使用Here Document遇意外EOF错误的排查咨询

错误原因及解决办法

错误原因

问题核心出在Here Document的终止符格式上:

  • 你使用<<- _EOF_时,这种写法仅允许终止符_EOF_前有制表符(Tab键)缩进,绝对不能用空格缩进;
  • 你的脚本里,函数内的_EOF_前应该是加了空格,导致bash无法识别这个终止符,它会把后续的return、}都当成Here Document的内容,直到文件结束都找不到函数的闭合},因此抛出Syntax error: end of file unexpected (expecting "}")。
  • 就算换成<< EOF,终止符也必须是该行唯一内容,不能有任何前导空格或制表符,否则同样会触发类似问题。

解决办法

有两种可行的修正方式:

方式1:让终止符顶格书写

直接把函数内的_EOF_改成顶格,不要加任何空格或制表符,修改后的函数代码如下:

report_home_space () {
 cat <<- _EOF_
 <h2>Home Space Utilization</h2>
 <pre>$(du -sh /home/*)</pre>
_EOF_  # 这里必须顶格,无任何前导空白
 return
}

方式2:用制表符缩进终止符(仅适配<<-写法)

如果想保留代码的缩进可读性,确保_EOF_前面的缩进是**制表符(Tab键)**而非空格,示例代码:

report_home_space () {
	cat <<- _EOF_
	 <h2>Home Space Utilization</h2>
	 <pre>$(du -sh /home/*)</pre>
	_EOF_  # 这里的缩进是Tab键,不是空格
	return
}

另外补充:脚本里的* other html here *在Here Document中不会被bash解析,若要添加注释,需在Here Document外部使用#,不过这部分不影响当前报错。

内容的提问来源于stack exchange,提问作者Ajeje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:15:41