首頁 >後端開發 >Golang >為什麼帶通配符的「mv」在 Go 和 Bash 中表現不同?

為什麼帶通配符的「mv」在 Go 和 Bash 中表現不同?

Patricia Arquette
Patricia Arquette原創
2024-12-10 18:48:11915瀏覽

Why Does `mv` with Wildcards Behave Differently in Go and Bash?

在Go 和Bash 中執行mv 指令的方式不同

在Go 中,使用exec 套件執行mv 指令可能會導致使用時出現問題命令參數中的通配符如“*”。雖然該命令在終端機中按預期工作,但星號通配符似乎在 Go 腳本中不起作用。

這種差異的原因在於 shell 和 Go 處理指令參數的方式。在終端機中,shell 解釋通配符並將其替換為匹配檔案名稱清單。但是,在 Go 中,命令會作為字串傳遞,並且它會將通配符視為參數的一部分。

要解決這個問題,您有兩個選項:

手動擴充通配符

你可以使用Go的filepath.Glob函數來取得與通配符匹配的檔案清單模式,然後將各個檔案名稱作為參數傳遞給exec.Command。例如:

files, err := filepath.Glob("./source-dir/*")
if err != nil {
    // Error handling
}

cmd := exec.Command("mv", files, "./dest-dir")

使用 Shell 呼叫

您可以呼叫 shell 本身來執行帶有通配符的 mv 指令。 shell 將解釋通配符並將擴充參數傳遞給 mv 指令。例如:

cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")

透過使用其中一種方法,您可以確保在 Go 腳本中正確處理通配符,從而允許您按預期執行 mv 命令。

以上是為什麼帶通配符的「mv」在 Go 和 Bash 中表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn