角かっこ拡張を使用しますが、出力で区切り文字としてスペースの代わりにコンマを使用するにはどうすればよいですか?

角かっこ拡張を使用しますが、出力で区切り文字としてスペースの代わりにコンマを使用するにはどうすればよいですか?

代わりにIFS=",";echo {1..5}出力するにはどうすればよいですか? bash echo {1..5}を作成してコンマで値を出力するにはどうすればよいですか?1,2,3,4,51 2 3 4 5

答え1

Bashの組み込み機能を使用してください。

5末尾のコンマを避けるために区切る必要があるため、これは少し見苦しくなります。

$ printf '%s,' {1..4}; echo 5
1,2,3,4,5

その後、printf変数に直接出力できますが、パラメータ拡張を使用してこの問題を解決し、最後のコンマを削除できます。

$ printf -v tmpvar "%s," {1..5}; echo "${tmpvar%,}"
1,2,3,4,5

または、"$*"最初の文字を使用して接続する with ですIFS。これはグローバル状態を破壊しますが、サブシェルまたは関数で実行すると簡単に回避できますlocal IFS

$ IFS=,; set -- {1..5}; echo "$*";
1,2,3,4,5

制限が変数にある場合、最も簡単な方法はループを使用して手動で実行することです。中括弧拡張範囲では、変数をエンドポイントとして使用できないためです。繰り返しますが、上限は特別なケースです。

a=1; b=5
for (( i=a ; i<b ; i++ )); do
    printf "$i,";
done;
printf "$b\n" 

答え2

以下を試してください。

seq --separator="," 1 5

答え3

数値中括弧拡張を使用しているため、発生する唯一のスペースは数値間のスペースであるため、結果を後処理できます。

output=$(echo {1..5} | tr ' ' ',')

または

output=$(echo {1..5} | sed 's/ /,/g')

答え4

スペースとコンマを許可する場合は、次のようにしてください。

$ echo {1..5},
1, 2, 3, 4, 5,

関連情報