如果我有一个像这样的 Python 程序(用任何类似的程序替代):
import sys
s = sys.argv[1]
print(s)
它仅打印提供的参数。在 Windows 中cmd.exe
,如果我想提供文字重定向字符>
,则需要将其括起来:
C:\> python a.py ">"
>
如果我想提供一个文字双引号字符,我需要使用以下语法:
C:\> python a.py """
"
我的理解是,在第二个例子中,文字双引号只有在紧跟结束引号后才会被识别。因此该示例读作“开始引号、结束引号、文字引号”。然而,我注意到一些奇怪的事情,这个例子:
C:\> python a.py """>
">
据我了解,shell 似乎错误地传递了一个文字重定向字符。如果我理解解析,它应该是打开引号、关闭引号、文字引号、重定向(不是文字)。这实际上是一个错误,还是我误解了解析规则?注意我使用 Windows 10 和 Windows 7 进行了测试。
答案1
问题是,据我理解,解析规则在 2008 年发生了变化:
http://daviddeley.com/autohotkey/parameters/parameters.htm#WINCRULES
从 C Runtime 开始msvcr90.dll
,命令行参数解析已得到改进。因此,不再是这样的:
C:\> python-2.5.4.amd64\python.exe a.py "a ""b"""" c"
a "b" c
结果为:
" open
a
" close
" literal
b
" open
" close
" literal
" open
c
" close
你可以这样做:
C:\> python-2.6.2.amd64\python.exe a.py "a ""b"" c"
a "b" c
结果为:
" open
a
" escape
" literal
b
" escape
" literal
c
" close
最后,讨论一下原来的例子:
" open
" escape
" literal
> literal
正确的命令(在发送一个双引号并重定向结果的上下文中)将是:
"""">