将括号扩展为单个参数

时间:2019-11-27 18:18:38

标签: bash shell brace-expansion

我正在这样调用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

与原始呼叫不同。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

首先创建一个数组。

args=(foo-{A,B,C}-bar)
func "${args[*]}"

答案 2 :(得分:0)

您可以使用命令替换:

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

等同于使用:

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