如何在括号扩展前言中插入分隔空格的参数?

如何在括号扩展前言中插入分隔空格的参数?

我想使用括号扩展来生成以下参数序列:./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[@]}"

相关内容