Bash

在 WSL 下的 Bash 中的 URL 中轉義 & 符號

  • June 6, 2018

我正在嘗試編寫一個 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.

由於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 概念。)

引用自:https://unix.stackexchange.com/questions/448195