我正在这样调用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
与原始呼叫不同。
答案 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"