1

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

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

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

4

3 回答 3

4

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

于 2012-05-22T03:52:10.487 回答
3

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

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

于 2012-05-22T03:46:23.843 回答
0

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

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

inbash和它说的一样EOF

于 2012-05-22T05:18:31.170 回答