如何使用 bash 大括号扩展输出逗号分隔的字符串

jre*_*nie 23 shell bash

我想要

$ echo a{b,c,d}
Run Code Online (Sandbox Code Playgroud)

输出一个逗号分隔的列表,如

ab,ac,ad
Run Code Online (Sandbox Code Playgroud)

而不是通常的输出

ab ac ad
Run Code Online (Sandbox Code Playgroud)

在命令行上执行此操作的最简单方法是什么?

gle*_*man 16

bash 似乎没有使用 $IFS 来加入生成的单词。另一种技术是将生成的单词存储在一个数组中,然后 $IFS起作用:

我将使用一个子shell,所以我不会改变这个shell的IFS:选择一个

( words=( a{b,c,d} ); IFS=,; echo "${words[*]}" )
( set -- a{b,c,d}; IFS=,; echo "$*" )
Run Code Online (Sandbox Code Playgroud)

将逗号分隔的字符串发送到标准输出。如果你想捕捉它:

joined=$( set -- a{b,c,d}; IFS=,; echo "$*" )
Run Code Online (Sandbox Code Playgroud)


dev*_*ull 15

假设元素不包含空格,您可以将空格转换为逗号:

echo a{b,c,d} | tr ' ' ,
Run Code Online (Sandbox Code Playgroud)

它产生:

ab,ac,ad
Run Code Online (Sandbox Code Playgroud)

您还可以使用带有字符的范围:

echo a{b..d} | tr ' ' ,
Run Code Online (Sandbox Code Playgroud)

如果您想要更大的范围,这尤其有用。


Tim*_*tin 6

我相信有很多方法可以实现这一点。这是一种方法:

echo a{b,c,d} | sed 's/ /,/g'
Run Code Online (Sandbox Code Playgroud)