Windows 上的“使用双引号参数执行”:揭开转义之谜
尝试在 Windows 上使用 exec 执行 find 命令时包时,用户经常会遇到意想不到的转义问题。当传递给命令的参数用双引号括起来时,就会出现问题,这会导致 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中文网其他相关文章!