Heredocument 在函数内缩进执行失败

Heredocument 在函数内缩进执行失败

我有一个包含函数和函数调用的脚本。函数内部有一个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

相关内容