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

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

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

./my_script.sh:  line 53: syntax error at line 61: `<<' unmatched

我已经使用过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 ...

答案1

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

参考:http://www2.research.att.com/sw/download/man/man1/ksh.html#输入/输出

相关内容