我有一个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
为什么第二个脚本起作用而第一个脚本不起作用?
heredoc终止符必须是该行上的only文本,不允许使用其他空格(*)
column_name=$(sqlplus -s $BASE_DB_CONN<<!!
....
exit
!!
)
(*)例外,对于使用<<-
的heredocs,任何前导tabs将从heredoc中删除,包括从终止符中删除。我在ksh93手册页中看到:
如果将#附加到<word。
中删除
感谢glenn jackman!现在工作正常