如何在 shell 函数中创建“此处文档”?

Ben*_*enU 3 linux shell-script macos

我正在我的 Mac OSX 10.7.5 系统上学习 William Shots Jr. 的精彩《Linux 命令行》。Shots 涵盖的 90% 的 linux 与 Darwin 足够接近,我可以弄清楚或 GTEM 来弄清楚发生了什么。我已经读到了第 27 章“编写 Shell 脚本”,并且正在为在函数中创建“此处文件”而烦恼。

syntax error: unexpected end of file当我包含以下函数时出现错误:

report_uptime () {
  cat <<- _EOF_
    <H2>System Uptime</H2>
    <PRE>$(uptime)</PRE>
    _EOF_
  return
}
Run Code Online (Sandbox Code Playgroud)

如果我使用以下函数占位符,错误就会消失:

report_uptime () {
  return
}
Run Code Online (Sandbox Code Playgroud)

另外,在脚本的其他地方,在函数之外,我使用该cat << _EOF_格式毫无问题地创建“此处文件”:

cat << _EOF_
<HTML>
      <HEAD>
            <TITLE>$TITLE</TITLE>
      </HEAD>
      <BODY>
            <H1>$TITLE</H1>
            <P>$TIME_STAMP</P>
            $(report_uptime)
            $(report_disk_space)
            $(report_home_space)
      </BODY>
</HTML>
_EOF_
Run Code Online (Sandbox Code Playgroud)

如果有人知道我做错了什么,我将不胜感激!

Яро*_*лин 5

如果重定向运算符为 \xe2\x80\x98<<-\xe2\x80\x99,则所有前导制表符将从输入行和包含分隔符的行中删除。这允许 shell 脚本中的此处文档以自然的方式缩进。

\n\n

如果这不起作用,请尝试将EOF标记移动到行的最开头(删除所有空格)。

\n

  • @BenU,请注意,手册页在这里非常具体:**制表符**不是**空格** (2认同)