环境:KornShell(ksh)
我想将下面的字符串分开:
-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 "$@"; do printf '<%s>\n' "$arg"; done
这会遍历所有参数,并且不会破坏空格中的参数。
答案 1 :(得分: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>
答案 2 :(得分:0)
你必须使用eval来使shell尊重引用的参数
$ 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[@]}"
你会注意到双引号已经从“复杂”论证中消失了。
但是,你的初始字符串不是"$*"
对吗?如果是,请改用"$@"
。