在浏览 SO 时,我有时会看到 EOFD,例如:
ftp -vn <$hostname> <<EOFD
是的,我试过谷歌但没有运气,以防万一你想知道。
在浏览 SO 时,我有时会看到 EOFD,例如:
ftp -vn <$hostname> <<EOFD
是的,我试过谷歌但没有运气,以防万一你想知道。
在您引用的问题的上下文中,EOFD
并不意味着什么特别,它只是 bash here document的开始。
来自高级 Bash 脚本指南:
这里的文档是一个特殊用途的代码块。它使用一种 I/O 重定向形式将命令列表提供给交互式程序或命令,例如 ftp、cat 或 ex 文本编辑器。
COMMAND <<InputComesFromHERE ... ... ... InputComesFromHERE
限制字符串描述(框架)命令列表。特殊符号
<<
位于限制字符串之前。这具有将命令块的输出重定向到stdin
程序或命令的效果。它类似于interactive-program < command-file
,其中command-file
包含command #1 command #2 ...
here document
等效项如下所示:interactive-program <<LimitString command #1 command #2 ... LimitString
选择一个
limit string
足够不寻常的,它不会出现在命令列表中的任何地方并混淆问题。
所以在那个问题中,作者正在发送命令,ftp
就好像交互式地使用它一样。
使用这些搜索词再试一次:here document
该<<EOFD
构造是一种特殊类型的 shell 脚本(Bourne、bash 和我不确定其他脚本)的重定向,它告诉 shell 将后面的行视为stdin
流,直到看到包含的行EOFD
。
该EOFD
字符串是任意的 - 任何唯一标记(或至少一个不会出现在stdin
输入流中的标记)。
既然这些词是任意的,为什么有人会写EOFD
而不是习惯EOF
呢?
(顺便说一句,还有使用这个!
字符的传统:
cat <<!
Hello
world
!
)
EOFD
如果您使用 here 文档生成的文本本身是一个 shell 脚本,它本身包含 here 文档,并且这些 here 文档已经EOF
用于分隔,则可能很有用:
cat <<EOFD
#!/bin/sh
# here doc script
cat <<EOF
Hello
World
EOF
EOFD
:)