如何获得大括号扩展的备用分隔符?

Wil*_*ell 2 bash

我发现自己经常做一些愚蠢的事情,比如:

cmd $( echo foo{1,2,3} | tr ' ' , )
Run Code Online (Sandbox Code Playgroud)

当我想调用cmd foo1,foo2,foo3. 我希望能够做一些类似的事情:

OFS=, ; cmd foo{1,2,3}

强制大括号扩展给我一个逗号分隔的列表。有这样的功能可用吗?

gle*_*man 5

我认为通过简单的变量或设置是不可能的。

但是,您可以捕获数组中的大括号扩展,然后使用 IFS 和参数替换来实现该效果:

$ ( a=( foo{1,2,3} ); IFS=,; printf -- "%s\n" "${a[*]}" )
foo1,foo2,foo3
Run Code Online (Sandbox Code Playgroud)

在那里,我使用了子 shell,因此我不会更改当前 shell 中的 IFS。


这是一个更简洁的简短函数:

$ join() { local IFS=$1; shift; printf -- "%s\n" "$*"; }
$ join , foo{1,2,3}
foo1,foo2,foo3
Run Code Online (Sandbox Code Playgroud)