Windows 上的「使用雙引號參數執行」:揭開轉義之謎
嘗試在Windows 上使用exec 執行時包時,使用者經常會遇到意想不到的轉義問題。當傳遞給命令的參數用雙引號括起來時,就會出現問題,這會導致 Windows 錯誤地解釋它。
就像提到的情況一樣,在執行時:
out, err := exec.Command("find", `"SomeText"`).Output()
Windows 將此轉換為到:
find /SomeText"
導致錯誤。
揭露原因:Windows 的古怪轉義
這種情況下的非典型轉義行為源於事實上,Windows 使用與其他作業系統不同的轉義機制。在Windows中,雙引號被用作特殊字符,當遇到時,它會嘗試轉義後面的字符。因此,在給定的命令中,Windows 將參數中的雙引號解釋為轉義字符,從而導致意外行為。
解決難題:一個精心設計的解決方案
解決這個問題需要兩部分來解決。首先,必須使用 SysProcAttr 欄位明確設定命令列,繞過預設行為。其次,必須手動建立命令列字串,確保正確轉義。
以下是包含這些調整的更新程式碼片段:
<code class="go">package main import ( "fmt" "os/exec" "syscall" ) func main() { cmd := exec.Command(`find`) cmd.SysProcAttr = &syscall.SysProcAttr{} cmd.SysProcAttr.CmdLine = `find "SomeText" test.txt` out, err := cmd.Output() fmt.Printf("%s\n", out) fmt.Printf("%v\n", err) }</code>
透過這些修改,find 指令將是在 Windows 上正確執行,讓您可以按預期搜尋檔案。
以上是為什麼雙引號參數的 exec 會在 Windows 上導致意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!