2010-08-05 71 views

回答

10

它标志着here-doc section的结束。

虽然EOF比ESQ更传统。

+0

我想你是指EOD? – ysth 2010-08-05 15:28:32

+1

我经常使用'EOF'。 – Ether 2010-08-05 16:36:36

+0

我通常会看到许多匹配'/^EO [AZ] + $ /',文件结束和数据结束的变体,看起来似乎最常见,但同时也很好地提供了一些关于你的结局的更多帮助。 – 2010-08-05 19:36:12

1

此构造被称为here-doc(因为您从文档(这里是)获取标准输入,而不是某处的文件系统上的外部文档)。

它基本上读取下一行中的所有内容,但不包括结束标记行,并将其用作正在运行的程序或命令的标准输入。结束标记线由<<之后的文本控制。

作为一个例子,在bash(其中我更熟悉比Perl),命令:

cat <<EOF 
hello 
goodbye 
EOF 

将运行cat然后发送两行它的标准输入(问候和再见线)。 Perl也有这个特性,尽管语法略有不同(正如你所期待的那样,因为它是一种不同的语言)。尽管如此,它仍然足以让解释依然成立。

维基百科有an entry for this你可能会发现,如果你知道它被称为here-doc,但否则将很难弄清楚。

你基本上可以使用任何合适的标记。例如,如果你输入线之一是EOF,你不能真正使用,作为一个标志,因为标准输入将被提前终止:

cat <<EOF 
This section contains the line ... 
EOF 
but then has more stuff 
and this line following is the real ... 
EOF 

在这种情况下,你可以使用DONE(或其他任何这并没有出现在文本中)。

还有其他选项,例如在标记周围使用引号(所以缩进看起来更好)以及使用单引号或双引号来控制变量替换。

如果您转到perlop页面并搜索<<EOF,它将有希望变得清晰。