关于“cat<< - _EOF_”的shell脚本

时间:2014-02-10 15:56:11

标签: shell cat

shell脚本错误

line 6: warning: here-document at line 2 delimited by end-of-file (wanted `_EOF_')

以下是代码:

#!/bin/bash
    cat <<- _EOF_  
        test:  
        1. test  
        0. test test   
    _EOF_

但这是对的。

#!/bin/bash
cat <<- _EOF_  
    test:  
    1. test  
    0. test test   
_EOF_  

2 个答案:

答案 0 :(得分:1)

来自Bash手册:

  

如果重定向运算符是&lt;&lt; - ,则所有前导制表符都是          从输入行和包含分隔符的行中删除。这个          允许here脚本中的文档以自然方式缩进          方式。

也就是说,如果你用空格而不是制表符缩进这些行,它将会失败。

另一个看不见的问题是终止字必须单独出现在线上,周围没有任何东西。如果您使用<<-而不是<<,则唯一的例外是引导标签。因此,_EOF_行上的尾随空格会这样做。

顺便说一句,测试确实表明Bash会容忍<<-和终止词之间的空格,但它不会在Bash手册中显示为允许。这可能是一个可移植性问题。

答案 1 :(得分:0)

此处文档-的{​​{1}}选项会抑制文档正文中的前导标签,但不是空格

所以用标签替换空格然后你的警告信息就会消失..

示例:

<<-

Reference Link