短语"文件结尾"是从哪里产生的,用于此处的文档?
something <<EOF
something else 1
something else 2
...
EOF
我认为有一些历史可以证明非直观的限制字符串是合理的,阅读维基百科的文章并不完全足够:为什么"文件"仍然渗透到程序中,而流和块更常用于构建这里的文档?
它来自Unix传统,其中所有内容都是文件。在此上下文中,"文件"并不意味着"磁盘文件",也不一定意味着任何关联的元数据 - 它意味着更接近现在称为"流"的东西。最多,"文件"是"文件描述符访问的东西"。换句话说,您正在生成的进程的 STDIN 是一个文件,而 heredoc 的 EOF 标志着它的结束。
因为EOF代表"文件结束"传统上被用作在程序中读取文件时返回的标记或异常的名称,以指示已到达文件末尾。这是一个非常古老的用法。
因此,当在这里编写文档并且您需要一个标记来标记它的结尾时(这应该是不太可能意外发生的事情),如果您习惯于使用该短语来指代文件结尾标记,那么"EOF"就会很自然地浮现在脑海中。由于它经常被使用,即使是那些不习惯以这种方式思考EOF的人也会接受它,因为他们在学习如何使用这里的文档时看到它在示例中使用。因此,用法传播开来。
一个约定。在 shell 脚本中,您几乎可以使用任何东西,例如,
cat <<stackoverflow
something else 1
something else 2
...
stackoverflow
在bash
做同样的事情,好像它说EOF
.