此处缩进的文档会导致语法错误

Bri*_*nge 3 ksh shell-script whitespace here-document

我的 shell 脚本中有以下代码片段,并且有一个错误,尽管进行了一些研究,但我似乎无法确定原因。当我运行如下代码时,脚本退出并显示一条消息

./my_script.sh:  line 53: syntax error at line 61: `<<' unmatched
Run Code Online (Sandbox Code Playgroud)

我已经使用过set -x并且可以看到在出现错误之前一切都很好(无论如何我只设置了变量)。出于某种原因,只需从eot允许它工作之前删除空格(它们是空格而不是非显示字符)。它让我的 xml 看起来有点不对齐但功能正常。有谁知道为什么会发生这种情况,因为我不喜欢这样的事情,我无法解释,我希望我的 xml 看起来也很漂亮。

这是脚本的相关部分:

# ... various environment variables set here ...

clean_files()          # line 53
{
    # Clear up the intermediate files
    mv $datafile $ARCHIVE_DIR/$(basename $datafile).$$
}

xmlfile_header()
{                      # line 60
        cat <<- eot
                <?xml version="1.0" encoding="UTF-8" ?>
                <ppllist>
        eot  
}

# ... more stuff ...
Run Code Online (Sandbox Code Playgroud)

gle*_*man 5

请注意,<<- wordhere-doc 表单要求在 之前只能出现制表符word。不能使用空格,必须是制表符。

参考:http : //www2.research.att.com/sw/download/man/man1/ksh.html#Input/Output