windows cmd 就压根不支持单引号,用了直接当成地址的一部分, linux shell 支持单引号又引号,不过合法 url 没有什么特殊字符需要反斜杠 \ 转义的吧,
ysc3839
2021-12-23 12:38:02 +08:00
@notgoda 首先要知道 Unix 和 Windows 命令行参数的区别,前者传递的是字符串数组,后者只是一个字符串。因此,在 Unix 下,是由 shell 把单个命令行字符串解析成字符串数组,再传递给程序的。至于 shell 的解析规则,可以看看楼上。 Windows 下传递的只是字符串,那为什么 C/C++程序仍然能拿到字符串数组形式的 argv 呢?那是因为 C 运行库自己解析了。其实在 Windows 下具体解析规则是跟程序有关的,不过大部分程序都会用 C 库或者系统提供的解析算法,规则是统一的,一般可以认为跟程序无关。 不过 Windows 这样的情况有坑,调用方需要把带引号等特殊符号的参数 escape 后传过去,很容易写出 bug 甚至安全漏洞。一个典型的例子是让用户输入路径然后通过参数传给某个程序,如果路径末尾是一个反斜杠,加上引号后会变成\",会被认为是引号的转义,导致问题。