EOF 行的问题在哪里?

Where´s the Issue with the EOF line?

我已从 SuSE 更改为 RHEL 并尝试使用相同的代码,我相信我遇到了一些与身份相关的错误。 SuSE 使用的是 bash3,而 RHEL 使用的是 bash4。

错误信息:

-bash: test.sh: line 9: unexpected EOF while looking for matching `)'
-bash: test.sh: line 21: syntax error: unexpected end of file

当我改变时:

    EOF)

为此(删除选项卡):

EOF)

工作正常。我了解这个问题,但我想了解为什么它在 SuSE 和 RHEL 上运行良好,但在 RHEL 上却不行。关键是在代码中更改它会花费很多时间和工作,所以有什么方法可以使用 unix 会话或一些配置来解决这个问题?

#!/bin/bash
    result=$(sqlplus -S /nolog  << EOF
        WHENEVER SQLERROR EXIT SQL.SQLCODE;
        Connect $ORACLE_USER/$(sh /bin/encrypt.sh -d "$ORACLE_PASS")@${HOST}:${PORT}/${HOST}
        set heading off
        set line 1000
        $QUERY;
        EXIT;
        EOF)
    result=$(echo $result | tail --lines=1)
    echo $result
    return $result
}

如果要缩进 here-doc 分隔符,应将 << 更改为 <<-。您必须使用制表符来缩进代码,空格不起作用。请注意 ) 不遵循 EOF;那是因为 bash 否则无法关闭 $()

VAL=$(cat <<-EOF
        derp
        EOF
)
echo "$VAL"
exit 0