我想使用括号扩展来生成以下参数序列:./some_command -c root.foo -c root.bar -c root.baz
。括号扩展乍一看似乎是一个完美的工具:用作-c root.
前言并{foo,bar,baz}
放在括号内。但是,前言不能包含字段分隔符:
./some_command -c root.{foo,bar,baz}
扩展为-c root.foo root.bar root.baz
(显然)./some_command -c\ root.{foo,bar,baz}
扩展为-c\ root.foo -c\ root.bar -c\ root.baz
(显然又是)。这里我得到了三个参数,而不是所需的六个。
是否可以使用参数分隔符来制作序言?
答案1
您可以连接括号扩展来获取交叉积
echo ./some_command {"-c root."}{foo,bar,baz}
然而
正确格式的括号扩展必须包含未加引号的左括号和右括号,并且至少一个不带引号的逗号或有效的序列表达式。任何不正确形成的括号扩展均保持不变。
--https://www.gnu.org/software/bash/manual/bash.html#Brace-Expansion
所以这可能没事
$ echo ./some_command {"-c root.",#}{foo,bar,baz}
./some_command -c root.foo -c root.bar -c root.baz #foo #bar #baz
被-c root.foo
视为一个单词,因此您可能需要eval
。
最好的方法是使用数组:
options=()
for arg in {foo,bar,baz}; do options+=( -c "root.$arg" ); done
echo ./some_command "${options[@]}"