如果我有这样的 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 似乎错误地传递了文字重定向字符。如果我理解解析,它应该是 Open Quote、Close Quote、Literal Quote、Redirect(不是文字)。这实际上是一个错误,还是我误解了解析规则?注意我使用 Windows 10 和 Windows 7 进行了测试。
问题是,我理解的解析规则在 2008 年发生了变化:
http://daviddeley.com/autohotkey/parameters/parameters.htm#WINCRULES
从 C Runtime 开始
msvcr90.dll
,命令行参数解析得到了改进。所以代替这个:结果在哪里:
你可以这样做:
结果在哪里:
最后,解决原始示例:
正确的命令(在发送一个双引号并重定向结果的上下文中)将是: