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" ...

我嘗試過以不同的方式逃避它,但沒有成功。有趣的是,從網頁管理外掛程式設定它效果很好。

更新

這個問題似乎與批次檔中的保留字元有關^(我認為),並且就批次檔而言沒有被引用(即 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}

參考:

相關內容