回答:
bashは生成された単語を結合するために$ IFSを使用しないようです。別の手法は、生成された単語を配列に保存し、その後$ IFS を使用することです。
サブシェルを使用するので、このシェルのIFSを変更しません。次のいずれかを選択します
( words=( a{b,c,d} ); IFS=,; echo "${words[*]}" )
( set -- a{b,c,d}; IFS=,; echo "$*" )
これにより、コンマ区切りの文字列が標準出力に出力されます。キャプチャする場合:
joined=$( set -- a{b,c,d}; IFS=,; echo "$*" )
これを達成する方法はたくさんあると確信しています。1つの方法を次に示します。
echo a{b,c,d} | sed 's/ /,/g'
示したように要素を展開し、それらをループして、最初の反復を除くすべてにカンマを追加します。
for i in a{b,c,d}; do
u="${u:+$u, }$i"
done
echo "$u"
結果:
ab, ac, ad
bashパラメーターの置換を参照してください。
多くのコンテキストでは、このようなリストでは末尾のコンマを使用できることに注意してください。 IF末尾のカンマが許容される、置換を処理するための最も簡単な方法ですprintf:
some-command "$(printf %s, a{b,c,d} )"
(some-commandカンマ区切りのリストで実行されるコマンドがあり、末尾のコンマは気にしません。)
実際には、末尾のコンマを持ってはいけない場合でも使用できますprintf。必要な引数の数を指定するだけで、非常に長いリストでは扱いにくくなります。
some-command "$(printf %s,%s,%s a{b,c,d} )"