我可以通过多种方式将双引号和大于号传递给任何命令:'"'
, "\""
,">"
但是当我尝试将它们一起传递时
C:\>echo "\">"
The system cannot find the path specified.
与 相同"\"\>"
。我可以让它与单引号一起工作,但由于我已经在处理引号方面做了很多事情,所以我想把它全部放在双引号内。
有什么办法可以逃避吗?
我在 windows7 上,但我相信这是一些向后兼容的“功能”,所以不确定这个信息是否相关。
编辑1:
我坚信 Endoro 的答案是正确的……但这并不是那么简单。CMD 的处理^>
方式不同,具体取决于字符串中是否存在转义的双引号。有人知道为什么吗?!还是不同的转义方法?
C:\>sh echo "\"^>"
">
C:\>sh echo "a^>"
a^>
C:\>echo "\"^>"
"\">"
C:\>echo "a^>"
"a^>"
编辑 2:这里是 Monacraft 建议的测试用例,^
在字符串周围的引号之前使用
C:\>echo ^"a/>"
The system cannot find the path specified.
(we still need to escape that > symbol)
C:\>echo ^"a/^>"
"a/>"
(work fine without \" in the string)
C:\>echo ^"\"/^>"
"\"/^>"
(add a single \" and the ^> escaping stop to works)
C:\>echo ^""/^>"
""/^>"
(ok, using ^ before the string means i dont have to escape the " anymore)
C:\>echo ^"^\"/^>"
"\"/^>"
(but what if i have an actual \" in my input that i have to escape... would ^\ prevent this from happening? nope)