如何使用 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 来连接生成的单词。另一种技术是将生成的单词存储在数组中,然后 $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

bash 参数替换

相关内容