我有一個UNIX腳本是這樣的:的Unix把多餘的空格/線,而將值傳遞給SQL語句
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
...這給錯誤的輸出。當我運行同一個sql語句與傳遞的值在sqlplus中的所有值在一行中我得到正確的輸出。
我需要知道爲什麼UNIX是打破聲明成多行和這可怎麼去除。這一直給我做惡夢。首先,我認爲價值沒有被正確地傳遞,這就是爲什麼產出是錯誤的。但只有unix在傳遞值的時候換行是導致錯誤的原因。請幫忙。
的B_PERIOD和t_period具有價值:「2010/12/01 - 2010/12/31」,現在,當我使用你所建議的方法,SQL查詢現在正處於單行參數僅但現在的問題是sed刪除' - '以及跟隨和跟蹤' - '的單個空間。我如何確保只有從開始不必要的空間被刪除,而不是這些?請建議。 – Pranay 2011-03-11 09:53:01
使用's/^ [\ t] * //; s/[\ t] * $ //'去除尾隨和前導空格。感謝您提供sed。 – Pranay 2011-03-11 10:04:51
抱歉,我的搜索模式存在疏漏。要包含'-'作爲一個不被刪除的有效字符,可以將它作爲'[[]]中的第一個或最後一個字符,例如'sed's/[^ - 0-9 \ /] * // g''。 – hlovdal 2011-03-11 12:27:41