3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個贊
Pascal Pilz用100%純Bash重寫解決方案(沒有外部命令):
function join_by { local IFS="$1"; shift; echo "$*"; }
例如,
join_by , a "b c" d #a,b c,d
join_by / var local tmp #var/local/tmp
join_by , "${FOO[@]}" #a,b,c
或者,我們可以使用printf來支持多字符分隔符,使用@gniourf_gniourf的思想。
function join_by { local d=$1; shift; echo -n "$1"; shift; printf "%s" "${@/#/$d}"; }
例如,
join_by , a b c #a,b,c
join_by ' , ' a b c #a , b , c
join_by ')|(' a b c #a)|(b)|(c
join_by ' %s ' a b c #a %s b %s c
join_by $'\n' a b c #a<newline>b<newline>c
join_by - a b c #a-b-c
join_by '\' a b c #a\b\c

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個贊
另一個解決辦法是:
#!/bin/bash
foo=('foo bar' 'foo baz' 'bar baz')
bar=$(printf ",%s" "${foo[@]}")
bar=${bar:1}
echo $bar
編輯:相同,但對于多字符可變長度分隔符:
#!/bin/bash
separator=")|(" # e.g. constructing regex, pray it does not contain %s
foo=('foo bar' 'foo baz' 'bar baz')
regex="$( printf "${separator}%s" "${foo[@]}" )"
regex="${regex:${#separator}}" # remove leading separator
echo "${regex}"
# Prints: foo bar)|(foo baz)|(bar baz

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個贊
$ foo=(a "b c" d)$ bar=$(IFS=, ; echo "${foo[*]}")$ echo "$bar"a,b c,d
添加回答
舉報(bào)