Bash中括弧拡張を使用してカンマ区切り文字列を出力する方法

Bash中括弧拡張を使用してカンマ区切り文字列を出力する方法

欲しい

$ echo a{b,c,d}

カンマ区切りのリストを出力します。

ab,ac,ad

一般的な出力の代わりに

ab ac ad

コマンドラインでこれを行う最も簡単な方法は何ですか?

答え1

仮説要素スペースがない場合は、スペースをコンマに変換できます。

echo a{b,c,d} | tr ' ' ,

次を生成します。

ab,ac,ad

文字とともに範囲を使用することもできます。

echo a{b..d} | tr ' ' ,

これは、より広い範囲が必要な場合に特に便利です。

答え2

bashは、生成された単語を連結するために$ IFSを使用しないようです。もう1つの手法は、生成された単語を配列に保存してから$ 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 "$*" )

答え3

私はこれを達成する方法がたくさんあると確信しています。 1つの方法は次のとおりです。

echo a{b,c,d} | sed 's/ /,/g'

答え4

示されているように要素を展開し、繰り返して、最初の繰り返しを除くすべての要素にコンマを追加します。

for i in a{b,c,d}; do
  u="${u:+$u, }$i"
done
echo "$u"

結果:

ab, ac, ad

バラよりbash パラメータの置換

関連情報