我发现自己经常做一些愚蠢的事情,比如:
cmd $( echo foo{1,2,3} | tr ' ' , )
Run Code Online (Sandbox Code Playgroud)
当我想调用cmd foo1,foo2,foo3. 我希望能够做一些类似的事情:
OFS=, ; cmd foo{1,2,3}
强制大括号扩展给我一个逗号分隔的列表。有这样的功能可用吗?
我认为通过简单的变量或设置是不可能的。
但是,您可以捕获数组中的大括号扩展,然后使用 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)
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |