如何在bash函数中使用Heredoc?


12

是否可以在bash函数中插入一个Heredoc

下面的简单示例将导致错误: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function

环境:

  • Ubuntu 11.04(GNU / Linux 2.6.38-8-服务器x86_64)
  • GNU bash版本4.2.8(1)-发行版(x86_64-pc-linux-gnu)

我觉得Heredoc是Perl的东西。有什么理由相信它可以在BASH中运行吗?
2011年

@jdw,此处的文档以多种语言(包括bash)提供。
Zoredache

我现在知道了。凉。
jdw 2011年

Answers:


10

您的代码对我来说看起来不错,所以我逐行复制了它,它对我有用:

  • OSX 10.7,bash 3.2.48(1)-发行版(x86_64-apple-darwin11)。
  • Ubuntu 10.04.3,bash 4.1.5(1)-发行版(x86_64-pc-linux-gnu)

您是否可以手动重新输入文件,以确保您没有丢失或添加空格/制表符/等?

另外,您如何执行它?我做了一个chmod +x test.sh然后./test.sh

编辑:当我在关闭HEREDOC的行的开头添加空格时,收到了与您相同的错误。

进一步说明:收盘后面的尾随空间HEREDOC也可能导致


1
很奇怪,现在可以正常工作... Vim颜色语法突出显示之前已识别HEREDOC(如果您在关闭HEREDOC之前添加该空格,则不会识别)我修改了原始脚本以仅使用外部文件,因此我不确定错了。但是,使用heredocs将更加方便!
Leftium

1
确实!我爱我一些heredocs。
David

1
另外:收盘后面的尾随空格HEREDOC也可能导致这种情况(这类错误的确很难找到。叹气。)
0laf 18-4-24
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.