第34行语法错误:`<

问题描述 投票:2回答:2

我有一个shell脚本,当我执行它时,出现错误

syntax error at line 34 : `<<' unmatched in ksh script

column_name=`sqlplus -s $BASE_DB_CONN<<!!
    WHENEVER SQLERROR exit ROLLBACK
    set SQLPROMPT ''
    set heading off
    set pagesize 1000
    set linesize 5000
    set feedback off
    set define on
    set verify off
    @smm9_stream_map.sql $STREAM_NAME $FIELD_NAME"
    exit
    !!`;

[令我惊讶的是,相同的东西在while循环更改的脚本中起作用,如下所示

while [ $a -lt ${NO_LOOP} ]
do
column_name=`sqlplus -s $BASE_DB_CONN<<!!
    WHENEVER SQLERROR exit ROLLBACK
    set SQLPROMPT ''
    set heading off
    set pagesize 1000
    set linesize 5000
    set feedback off
    set define on
    set verify off
    @smm9_stream_map.sql $STREAM_NAME $FIELD_NAME"
    exit
    !!`;
a=`expr $a + 1`
done

为什么第二个脚本起作用而第一个脚本不起作用?

shell sqlplus ksh
2个回答
2
投票

heredoc终止符必须是该行上的only文本,不允许使用其他空格(*)

column_name=$(sqlplus -s $BASE_DB_CONN<<!!
    ....
    exit
!!
)

(*)例外,对于使用<<-的heredocs,任何前导tabs将从heredoc中删除,包括从终止符中删除。我在ksh93手册页中看到:

如果将附加到<word。

中删除

0
投票

感谢glenn jackman!现在工作正常

© www.soinside.com 2019 - 2024. All rights reserved.