命令提示符引用错误

命令提示符引用错误

如果我有一个像这样的 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

正确的命令(在发送一个双引号并重定向结果的上下文中)将是:

"""">

相关内容