【问题标题】:Why is "End of File" (EOF) the defacto delimeter for here documents? [closed]为什么“文件结尾”(EOF)是此处文档的实际分隔符? [关闭]
【发布时间】:2012-05-28 13:17:25
【问题描述】:

用于此处文档的“文件结尾”一词从何而来?

something <<EOF
something else 1
something else 2
...
EOF

我假设有一些历史可能证明非直观的限制字符串是合理的,并且阅读 Wikipedia's article 还不够:为什么“文件”仍然遍布程序,而流和块更常用于构建此处的文档?

【问题讨论】:

  • 因为EOF 是“真实的东西”,人们已经习惯了...?
  • 您使用了python 作为您的标签之一。这里的文档不需要在python 中使用分隔符,因为使用了三引号,您的意思是perl吗?
  • EOF 恕我直言,是一个非常好的和直观的标记。是什么让你觉得不是?你会建议什么?

标签: python ruby file shell heredoc


【解决方案1】:

因为 EOF 代表“文件结尾”传统上被用作在程序中读取文件时返回的标记或异常的名称,以指示已到达文件结尾。这是一个非常古老的用法。

因此,当在这里编写文档并且您需要一个标记来标记文档的结尾(这应该是不太可能发生的意外情况)时,如果您习惯使用该短语来指代,那么“EOF”会很自然地浮现在脑海中到文件结束标记。由于它被如此频繁地使用,它甚至被那些习惯以这种方式思考 EOF 的人所接受,因为当他们在这里学习如何使用时,他们会在示例中看到它使用它文件。因此使用传播。

【讨论】:

    【解决方案2】:

    它来自 Unix 传统,everything is a file。在这种情况下,“文件”并不意味着“磁盘文件”,也不一定意味着任何相关的元数据——它意味着更接近现在被称为“流”的东西。最多,“文件”是“由文件描述符访问的东西”。换句话说,您正在生成的进程的 STDIN 是一个文件,heredoc 的 EOF 标志着它的结束。

    【讨论】:

      【解决方案3】:

      这只是一个约定。在 shell 脚本中,您几乎可以使用任何东西,例如,

      cat <<stackoverflow
      something else 1
      something else 2
      ...
      stackoverflow
      

      bash 中的作用与EOF 相同。

      【讨论】:

        猜你喜欢
        • 2019-08-13
        • 1970-01-01
        • 2016-04-04
        • 2015-01-27
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 2022-06-14
        • 2018-07-06
        相关资源
        最近更新 更多