Решение по перезаписи Паскаля Пилза как функция в 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