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

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

代わりに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" 

おすすめ記事