在 WSL 下的 Bash 中的 URL 中轉義 & 符號
我正在嘗試編寫一個 Bash 函式,該函式將從命令行獲取一些參數並將它們放入包含 URL 參數(即 contains
?
和&
)的 URL 中。如果 URL 中只有一個參數,則沒有
&
,也沒有問題,即如果我定義如下函式:test() { cmd.exe /c start https://example.com/\?foo=$1 }
並用 呼叫它
test bar
,它會在我的瀏覽器中打開 URLhttps://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.
由於
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 概念。)