“文件结束”这个短语出现在哪里用于此处的文件?
something <<EOF
something else 1
something else 2
...
EOF
我认为有一些历史可能证明非直观的限制字符串是合理的,而阅读Wikipedia's article还不够:为什么“文件”仍然遍及程序,而流和块更常用于构建这里的文档?
答案 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
的情况相同。