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

lzb*_*ari 4 shell cat

shell 脚本出错

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

这是代码:

#!/bin/bash
    cat <<- _EOF_  
        test:  
        1. test  
        0. test test   
    _EOF_
Run Code Online (Sandbox Code Playgroud)

但这是对的。

#!/bin/bash
cat <<- _EOF_  
    test:  
    1. test  
    0. test test   
_EOF_  
Run Code Online (Sandbox Code Playgroud)

War*_*ung 6

来自 Bash 手册:

如果重定向运算符为 <<-,则所有前导制表符将从输入行和包含定界符的行中去除。这允许 shell 脚本中的此处文档以自然的方式缩进。

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

另一个看不见的问题是终止词必须单独出现在该行上,周围没有任何内容。唯一的例外是前导制表符,如果您使用<<-而不是<<. 因此,行尾部空格_EOF_可以做到这一点。

顺便说一句,测试确实表明 Bash 可以容忍<<-和 终止词之间有空格,但 Bash 手册中并未显示出允许的情况。这可能是一个可移植性问题。