我正在尝试编写一个 Bash 函数,该函数将从命令行获取一些参数并将它们放入包含 URL 参数(即 contains?
和&
)的 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
,在浏览器中打开与之前相同的 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.
答案1
由于是cmd.exe
通过命令调用的,因此cmd.exe
转义语法需要使用,而不是 Bash 转义语法,即&
需要转义为^&
(并且?
不需要转义)。以下工作按预期进行:
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 概念。)