【问题标题】:How to apply multiple parameter expansion in BASH for a single output?如何在 BASH 中为单个输出应用多个参数扩展?
【发布时间】:2020-02-29 18:01:04
【问题描述】:

files=("Benjamin Johnson" "Bastin Johnson" "Bagio Johnson")

( IFS=','; echo "${files[*]/#/Mr.}"; echo "${files[*]/ /_}" )

预期结果 Mr.Benjamin_Johnson,Mr.Bastin_Johnson,Mr.Bagio_Johnson

输出结果:

Mr.Benjamin Johnson,Mr.Bagio Johnson,Mr.Bastin Johnson

Benjamin_Johnson,Bagio_Johnson,Bastin_Johnson

【问题讨论】:

    标签: bash linux-kernel redhat command-substitution parameter-expansion


    【解决方案1】:

    或使用printf

    $ printf "Mr.%s,Mr.%s,Mr.%s" ${files[@]/ /_}
    Mr.Benjamin_Johnson,Mr.Bastin_Johnson,Mr.Bagio_Johnson
    

    或者只有一个%s

    $ printf "Mr.%s," ${files[@]/ /_}
    Mr.Benjamin_Johnson,Mr.Bastin_Johnson,Mr.Bagio_Johnson,
    

    但这会添加最后一个逗号,可以像这样删除

    $ printf -v test "Mr.%s," ${files[@]/ /_}; echo ${test%,}
    Mr.Benjamin_Johnson,Mr.Bastin_Johnson,Mr.Bagio_Johnson
    

    【讨论】:

      【解决方案2】:

      只使用一个中间数组。

      ( IFS=','; files=("${files[@]/#/Mr.}"); echo "${files[*]/ /_}" )
      

      【讨论】:

      • 谢谢@KamilCuk
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多