【问题标题】: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[*]/ /_}" )