Se eu tiver um programa Python como este (substitua por qualquer programa semelhante):
import sys
s = sys.argv[1]
print(s)
Ele apenas imprime o argumento fornecido. Com o Windows cmd.exe
, se eu quiser fornecer um caractere de redirecionamento literal >
, preciso citá-lo:
C:\> python a.py ">"
>
e se eu quiser fornecer um caractere de aspas duplas literal, preciso usar esta sintaxe:
C:\> python a.py """
"
Meu entendimento é que, com o segundo exemplo, uma aspa dupla literal só é reconhecida se seguir imediatamente uma aspa de fechamento. Portanto, esse exemplo é lido como aspas abertas, aspas fechadas, aspas literais. Porém notei algo estranho, este exemplo:
C:\> python a.py """>
">
Pelo que entendi, parece que o shell passou um caractere de redirecionamento literal por engano. Se entendi a análise, deve ser Aspas abertas, Aspas fechadas, Aspas literais, Redirecionamento (não literal). Isso é de fato um erro ou entendi mal as regras de análise? Observação, testei com Windows 10 e Windows 7.
A questão é que as regras de análise como eu as entendi mudaram em 2008:
http://daviddeley.com/autohotkey/parameters/parameters.htm#WINCRULES
A partir do C Runtime
msvcr90.dll
, a análise de argumentos da linha de comando foi aprimorada. Então ao invés disso:Onde o resultado é:
Você consegue fazer isso:
Onde o resultado é:
Finalmente, para abordar o exemplo original:
O comando correto (no contexto de enviar uma aspa dupla e redirecionar o resultado) seria: