Bash 配列の要素を区切られた文字列に結合するにはどうすればよいでしょうか? 質問する

Bash 配列の要素を区切られた文字列に結合するにはどうすればよいでしょうか? 質問する

Bash に次のような配列がある場合:

FOO=( a b c )

要素をコンマで結合するにはどうすればよいでしょうか? たとえば、 を作成しますa,b,c

ベストアンサー1

複数文字の区切り文字をサポートする 100% 純粋な Bash 関数は次のとおりです。

function join_by {
  local d=${1-} f=${2-}
  if shift 2; then
    printf %s "$f" "${@/#/$d}"
  fi
}

例えば、

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
join_by '-n' '-e' '-E' '-n' #-e-n-E-n-n
join_by , #
join_by , a #a

上記のコードは、@gniourf_gniourf、@AdamKatz、@MattCowell、@x-yuri のアイデアに基づいています。オプションerrexit( set -e) およびnounset( set -u) で動作します。

あるいは、単一の文字区切り文字のみをサポートするより単純な関数は次のようになります。

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

このソリューションは、Pascal Pilz のオリジナルの提案に基づいています。

ここで以前に提案された解決策の詳細な説明は、「bash スクリプトで配列要素を join() する方法」、dev.tomeleuによる記事

おすすめ記事