为什么“文件结束”(EOF)是这里文件的事实上的分隔符?

时间:2012-05-22 03:37:35

标签: python ruby file shell heredoc

“文件结束”这个短语出现在哪里用于此处的文件?

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

因此,当在这里写文档并且你需要一个标记来标记它的结尾(这应该是不可能偶然发生的事情)时,如果你习惯使用那个短语来引用“EOF”会很自然地想到到文件结束标记。由于经常使用它,即使那些已经不习惯用EOF思考的人也会接受它,因为当他们在这里学习如何使用时,他们会看到它用于示例中文档。因此用法传播。

答案 2 :(得分:0)

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

cat <<stackoverflow
something else 1
something else 2
...
stackoverflow
bash中的

与表示EOF的情况相同。