我的 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
请注意,<<- word
here-doc 表单要求仅制表符可以出现在之前word
。不能使用空格,必须是制表符。
参考:http://www2.research.att.com/sw/download/man/man1/ksh.html#输入/输出