我有一个像这样的unix脚本:
value1=`sqlplus -s ivr/ivr <<EOF
set heading off;
set feedback off;
set linesize 500;
set serveroutput on;
set wrap off;
SELECT FM.getSequence_n('$b_period', '$t_period', '$opr', '$fran', '$poi_s')
FROM DUAL;
exit;
EOF` ,
参数作为用户的输入。当我使用'ksh -x filename.sh'在调试模式下运行脚本时,我注意到当unix脚本将值传递给select语句时,它会将其分解为:
SELECT FM.getSequence_n('
2010/12/01 - 2010/12/31','
2010/12/01 - 2010/12/31','TTSLAP','UWAP','TTSL-LOC')
FROM DUAL
...提供错误的输出。当我使用sqlplus中传递的值运行相同的sql语句时,所有值都在一行中,我得到正确的输出。
我需要知道为什么unix会将语句分成多行,如何删除它。这让我做恶梦。首先,我认为价值没有正确传递,这就是输出错误的原因。但是,只有在传递值时由unix进行的换行才是错误的原因。请帮忙。
答案 0 :(得分:0)
变量的值包括换行符。做这样的事情来检查:
echo "$b_period" | hexdump -C
答案 1 :(得分:0)
您的$b_period
和$t_period
变量似乎包含换行符。如果他们直接从用户那里输入,你真的应该做一些input validation first before using them。
尝试类似
的内容filtered_b_period=`echo $b_period | sed 's/[^0-9\/]*//g'`
filtered_t_period=`echo $t_period | sed 's/[^0-9\/]*//g'`
也许您应该添加进一步检查,但至少您应该能够以这种方式过滤掉不需要的字符。