Shell 中的 HereDoc

背景

在我最早的一篇文章:Python 简单入门指北 中就介绍了 HereDoc,它能够以 “所见即所得” 的形式输出内容,避免开发者对格式投入太多精力,比如下面这段 Python 代码:

s = '''<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK='window.history.back()'></FORM>
</BODY></HTML>
'''

我们不需要太多的思索,就能直观的看到输出结果。但如果要定义字符串呢?就要考虑换行、缩进和字符转义了:

s = '<HTML><HEAD><TITLE>\nFriends CGI Demo</TITLE></HEAD>\n<BODY><H3>ERROR</H3>\n<B>%s</B><P>\n<FORM><INPUT TYPE=button VALUE=Back\nONCLICK=\'window.history.back()\'></FORM>\n</BODY></HTML>'

初识 HereDoc

Shell 中也有 HereDoc,比如我想输出多行内容:

cat <<EOF
This
is
a
test
EOF

它的语法格式是:

cat <<DELIMINATOR
...
content
...
DELIMINATOR

可见 EOF 并不是强制的,可以由用户自行定义。HereDoc 还可以重定向输出到文件中:

cat <<DELIMINATOR >> ~/Desktop/output.txt
...
content
...
DELIMINATOR

常规做法的问题

然而,如果你把上面这些代码放到函数里,可能就行不通了:

```shell
function foo() {
cat <<EOF
This
is
a
test
EOF

top Created with Sketch.