我想要
$ 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 来连接生成的单词。另一种技术是将生成的单词存储在数组中,然后 $IFS将要正在玩:
我将使用子 shell,这样我就不会更改此 shell 的 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
我确信有很多方法可以实现这一目标。这是一种方法:
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