【问题标题】:Splitting a string in arguments (using sed/awk)在参数中拆分字符串(使用 sed/awk)
【发布时间】:2012-05-16 20:45:02
【问题描述】:

环境: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

我尝试了很多,但无法获得预期的输出,但现在我想我需要一些帮助。请帮忙。

【问题讨论】:

  • 您是否想解析传递给脚本的参数?

标签: shell unix scripting ksh tokenize


【解决方案1】:
for arg in "$@"; do printf '<%s>\n' "$arg"; done

这会遍历所有参数并且不会在空格处中断参数。

【讨论】:

    【解决方案2】:
    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> 
    

    【讨论】:

      【解决方案3】:

      您必须使用 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[@]}"
      您会注意到双引号已从“复杂”参数中消失。

      但是,您的初始字符串不是"$*" 对吗?如果是,请改用"$@"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 2014-12-22
        • 2017-08-25
        • 2016-01-27
        • 2017-02-08
        相关资源
        最近更新 更多