Выход из амперсанда (&) в URL в Bash под WSL

Я пытаюсь написать функцию Bash, которая будет принимать некоторые аргументы из командной строки и помещать их в URL, который содержит параметры URL (то есть содержит ? И & ).

Если в URL есть только один параметр, нет & , и нет проблем, т. Е. Если я определю следующую функцию:

 test() { cmd.exe /c start https://example.com/\?foo=$1 } 

и вызвать его с помощью test bar , он открывает URL-адрес https://example.com/?foo=bar в моем браузере, что совершенно правильно.

Проблема в том, когда я хочу добавить второй параметр URL. Затем я расширяю функцию следующим образом:

 test() { cmd.exe /c start https://example.com/\?foo=$1\&baz=$2 } 

но когда я test bar qux его с помощью test bar qux , в моем браузере test bar qux тот же URL, что и раньше ( https://example.com/?foo=bar ), и мой терминал отображает ошибку 'baz' is not recognized as an internal or external command, operable program or batch file.

Заключение URL в двойные кавычки также не помогает: когда я изменяю его на

 test() { cmd.exe /c start "https://example.com/\?foo=$1\&baz=$2" } 

он открывает URL-адрес https://example.com//?foo=bar" , и я по-прежнему получаю сообщение об ошибке 'baz' is not recognized as an internal or external command, operable program or batch file.

Поскольку cmd.exe вызывается с помощью команды, необходимо использовать escape-синтаксис cmd.exe , а не синтаксис Bash escape, то есть & необходимо экранировать как ^&? Не нужно экранировать). Следующее работает как задумано:

 test() { cmd.exe /c start "https://example.com/?foo=$1^&baz=$2" } 

(Обратите внимание, что 'baz' is not recognized as an internal or external command, operable program or batch file. Это ошибка, сгенерированная cmd.exe : это относится к пакетному файлу, который является концепцией Windows.)