我正在调用一个 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
这与原始调用不同。
我正在调用一个 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
这与原始调用不同。
首先创建一个数组。
args=(foo-{A,B,C}-bar)
func "${args[*]}"
您可以将大括号扩展结果构造为位置参数列表,并将参数扩展为单个扩展字符串。
set -- foo-{A,B,C}-bar
func "$*"
set
带有大括号扩展结果的命令分别设置$1
asfoo-A-bar
和$2
as的参数foo-B-bar
。使用这些位置参数,数组扩展$*
会使它们组合为由默认IFS
值连接的单个字符串(单个空格)
您可以使用命令替换:
func "$(echo foo-{A,B,C}-bar)"
这相当于使用:
func "foo-A-bar foo-B-bar foo-C-bar"