Как применить множественное расширение параметров в BASH для одного выхода? - PullRequest
0 голосов
/ 29 февраля 2020

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

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Или используйте 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
0 голосов
/ 29 февраля 2020

Просто используйте промежуточный массив.

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