为什么我得到 `(' 不匹配

Why am I getting `(' unmatched

我无法弄清楚为什么我会收到标题中定义的错误。

前几天,我在类似的脚本中遇到了同样的问题,但 `<<' 无法匹配。然后我发现 this 帮助我解决了我的问题。我无法对这个问题应用相同类型的修复程序。

我的街区:

   +95          master_table=$(sqlplus -s <<- EOF
   +96          ${SQLMSTR}
   +97          select * from UTILS.PAGE_TO;
   +98          EOF
   +99          )

如果我在行 98 上删除 EOF 之前的所有空格,我可以让它工作。谁能帮我理解我做错了什么?

我正在使用 ksh93

我的 "other" 块来自一个有效的单独脚本(脚本的每一行前都有空格):

sqlplus -s <<- EOF
${SQLMSTR}
exec utils.change_page('${TEAM}');
EOF

<<-更改为<<并将EOF移至行首:

   +95          master_table=$(sqlplus -s << EOF
   +96          ${SQLMSTR}
   +97          select * from UTILS.PAGE_TO;
   +98  EOF
   +99          )

我知道它看起来很难看。解决此问题的一种方法是创建一个将 SQL 语句作为参数并运行它的函数。像这样:

function run_sqlplus() {
  sqlplus -s << EOF
    ${SQLMSTR}
    $@
EOF
}

    : indented code
    master_table=$(run_sqlplus 'select * from UTILS.PAGE_TO;')