我有一个包含函数和函数调用的脚本。函数内部有一个heredocument:
#!/bin/bash
DWA() {
......
mysql -u root -p <<-MYSQL
......
MYSQL
}
DWA
问题
执行因有关此处文档分隔符的错误而中断(可能是由于分隔符MYSQL
缩进所致)。
当我删除所有引线(空格/制表符)时,问题没有发生。
我的问题
给定函数删除所有前导选项卡(我不知道其他类型的前导,例如空格),为什么我会遇到这个问题,如果有的话,可以采取什么措施来解决这个问题?
答案1
您可能没有使用制表符缩进您的定界文档。 Heredoc 的每一行都必须使用制表符缩进,包括第一行(引入分隔符的地方)。这是一个给您的测试用例:
echo -e 'function heredoc() {\n\tcat <<-HEREDOC\n\t\tThis is a test\tHEREDOC\n} heredoc' > heredoc.sh
尝试运行该命令,然后运行heredoc.sh
.您应该得到以下输出:
This is a test.
或者,这里是相同的脚本,但第一行用空格而不是制表符缩进:
echo -e 'function heredoc() {\n cat <<-HEREDOC\n\t\tThis is a test\tHEREDOC\n} heredoc' > heredoc2.sh
如果我们运行heredoc2.sh
我们会得到以下错误输出:
bash heredoc2.sh
heredoc2.sh: line 4: warning: here-document at line 2 delimited by end-of-file (wanted `HEREDOC')
heredoc2.sh: line 5: syntax error: unexpected end of file