2012-05-08 28 views
-1

環境:KornShell(KSH)劈裂參數(SED使用/ AWK)的字符串

我想下面的字符串分隔:

-ssRMDFXXRT -rtETL -ltDAILY -sD20120203 -lfRS -UP"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" -QqDESKTOP -Ln9999 -XmXMLBLOCK 

和輸出應該是(字符串後-UP應保持作爲一個單一的令牌):

-ssRMDFXXRT 
-rtETL 
-ltDAILY 
-sD20120203 
-lfRS 
-UP"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" 
-QqDESKTOP 
-Ln9999 
-XmXMLBLOCK 

我試了很多,但不能得到預期的輸出,但現在我想我需要一些幫助。請幫忙。

+0

你也許想解析傳遞給你的腳本的參數嗎? –

回答

1
for arg in "[email protected]"; do printf '<%s>\n' "$arg"; done 

這對所有參數進行迭代,並且不會在空格處中斷參數。

0
krithika.542> echo "-ssRMDFXXRT -rtETL -ltDAILY -sD20120203 -lfRS -UP"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" -QqDESKTOP -Ln9999 -XmXMLBLOCK" | perl -pe 's/ /\n/g' 
-ssRMDFXXRT 
-rtETL 
-ltDAILY 
-sD20120203 
-lfRS 
-UPEffTimeStamp=20110203-210000#InputCtxNm=Forigen 
Exchange 
Today#RunType=EOD 
-QqDESKTOP 
-Ln9999 
-XmXMLBLOCK 
krithika[ncm_o12.0_int.cctcsvibh].543> 
0

你將不得不使用eval來獲取殼尊重報價參數

$ str='-ssRMDFXXRT -rtETL -ltDAILY -sD20120203 -lfRS -UP"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD" -QqDESKTOP -Ln9999 -XmXMLBLOCK' 
$ arr=($str); echo ${#arr[@]} 
11 
$ arr=("$str"); echo ${#arr[@]} 
1 
$ eval arr=($str); echo ${#arr[@]} 
9 

然後通過線顯示:printf "%s\n" "${arr[@]}"
你會注意到雙引號已從消失「複雜」的說法。

但是,您的初始字符串不是"$*"對不對?如果是,請改用"[email protected]"