rabbitmqctl set_policy 从正则表达式模式中删除插入符号 (^) 锚点

rabbitmqctl set_policy 从正则表达式模式中删除插入符号 (^) 锚点

我正在从 PowerShell 运行它,所以我不确定这是否会在不同的环境中发生(正则表达式本身只包含除以“amq”开头的所有内容)。

当我运行以下命令时,“^”从模式中删除:

rabbitmqctl set_policy mirroring '^(?!(?:amq\.)).+$' '{"""ha-mode""":"""all"""}'

它输出以下内容:

Setting policy "mirroring" for pattern "(?!(?:amq\\.)).+$" to "{\"ha-mode\":\"all\"}" with priority "0" ...

我尝试过用不同的方法逃脱,但都没有成功。有趣的是,从 Web 管理插件进行设置却没问题。

更新

这个问题似乎与批处理文件中的保留字符有关^(我认为),并且就批处理文件而言没有被引用(即 PS 需要为模式传入带引号的字符串,但它按原样传入正则表达式)。以下任何一项工作,基于节拍器的回答:

rabbitmqctl set_policy mirroring '"^(?!(?:amq\.)).+$"' '{\"ha-mode\":\"all\"}'

rabbitmqctl --% set_policy mirroring "^(?!(?:amq\.)).+$" {\"ha-mode\":\"all\"}

rabbitmqctl @('set_policy','mirroring','"^(?!(?:amq\.)).+$"','{\"ha-mode\":\"all\"}')

Start-Process -FilePath 'rabbitmqctl' -ArgumentList 'set_policy mirroring "^(?!(?:amq\.)).+$" {\"ha-mode\":\"all\"}'

答案1

PS 2.0 及更高版本:

如果您指定一个值数组,它将自动将它们扩展为单独的参数。

& rabbitmqctl @('set_policy mirroring', '^(?!(?:amq\.)).+$', '{ha-mode:all}')

使用Start-Processcmdlet。

Start-Process -FilePath 'rabbitmqctl' -ArgumentList 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'

# Same as above, shortened using aliases and positional parameters

start rabbitmqctl 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'
saps rabbitmqctl 'set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}'

PS 3.0 及更高版本:

...您可以使用--%运算符告诉 PowerShell 从该点开始停止解析,直到行末。从该运算符开始的所有内容都由程序使用的解析器进行解析。

rabbitmqctl --% set_policy mirroring ^(?!(?:amq\.)).+$ {ha-mode:all}

参考:

相关内容