-1

環境: KornShell (ksh)

以下の文字列を分離したい:

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

出力は次のようになります (-UP の後の文字列は 1 つのトークンとして残る必要があります)。

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

私は多くのことを試しましたが、期待した出力を得ることができませんでしたが、今は助けが必要だと思います. 助けてください。

4

3 に答える 3

1
for arg in "$@"; do printf '<%s>\n' "$arg"; done

これはすべての引数を繰り返し処理し、スペースで引数を分割しません。

于 2012-05-08T11:14:58.303 に答える
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> 
于 2012-05-08T12:53:30.213 に答える
0

You'll have to use eval to get the shell to respect the quoted argument

$ 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

Then to display by line: printf "%s\n" "${arr[@]}"
You'll notice the double quotes have vanished from the "complex" argument.

But, your initial string is not "$*" right? If it is, use "$@" instead.

于 2012-05-08T14:00:34.227 に答える