【问题标题】:Why am I getting `(' unmatched为什么我得到'('不匹配
【发布时间】:2017-03-03 16:27:19
【问题描述】:

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

前几天我在一个类似的脚本中遇到了同样的问题,但是 `this,它帮助我解决了我的问题。我在对这个问题应用相同类型的修复时遇到了麻烦。

我的块:

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

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

我正在使用 ksh93

我的“其他”块来自一个单独的有效脚本(脚本的每一行之前都有空格):

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

【问题讨论】:

  • 您是否使用制表符进行缩进? &lt;&lt;- 仅适用于制表符,不适用于空格。
  • 嗨,@codeforester,我正在使用空格,但我也尝试使用 &lt;&lt;#,但没有成功

标签: unix ksh


【解决方案1】:

&lt;&lt;- 更改为&lt;&lt; 并将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;')

【讨论】:

  • 您好,谢谢您的回答。正如我在问题中所说,如果我将EOF 移动到98 行的开头,我能够成功运行,正如您在回答中所建议的那样,但是,我希望保持格式一致。难道我不能这样做吗?
  • 我刚刚更新了答案,提出了如何保持缩进的建议。
  • 谢谢,我确实在另一个脚本中使用了函数方法,我只是想通过使用here-doc还有另一种方法
猜你喜欢
  • 1970-01-01
  • 2019-06-28
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 2011-08-26
  • 2019-03-18
  • 1970-01-01
相关资源
最近更新 更多