1

我正在调用一个 bash 函数,如下所示:

func "foo-A-bar foo-B-bar foo-C-bar"

我想用一个计算结果相同的单个参数的大括号扩展替换上面的内容。以下不起作用:

func foo-{A,B,C}-bar

因为这是三个单独的参数,而不是一个具有空格分隔值的参数。也就是说,它等价于:

func foo-A-bar foo-B-bar foo-C-bar

这与原始调用不同。

4

3 回答 3

2

首先创建一个数组。

args=(foo-{A,B,C}-bar)
func "${args[*]}"
于 2019-11-27T18:25:20.283 回答
2

您可以将大括号扩展结果构造为位置参数列表,并将参数扩展为单个扩展字符串。

set -- foo-{A,B,C}-bar
func "$*"

set带有大括号扩展结果的命令分别设置$1asfoo-A-bar$2as的参数foo-B-bar。使用这些位置参数,数组扩展$*会使它们组合为由默认IFS值连接的单个字符串(单个空格)

于 2019-11-27T18:23:31.400 回答
0

您可以使用命令替换:

func "$(echo foo-{A,B,C}-bar)"

这相当于使用:

func "foo-A-bar foo-B-bar foo-C-bar"
于 2019-11-27T18:23:07.510 回答