PowerShell的调用运算符(&)语法和双引号

Pet*_*ale 11 powershell

有人可以向我解释这个结果吗?多年来我试图掌握PowerShell调用命令的语法浪费了很多时间,但是这......我甚至无法猜测如何从输入中获得这个结果.

PS C:\Users\P> & echoargs "   ""1"" 2 3 ""4 5 6""   7 8 9"
Arg 0 is <   1 2 3 4>
Arg 1 is <5>
Arg 2 is <6   7 8 9>
Run Code Online (Sandbox Code Playgroud)

Bueller?

Kei*_*ill 4

双引号字符串内的双引号是插入双引号的一种方法。echoargs.exe 的更新版本更清楚地显示了这一点,因为它显示了用于调用 exe 的命令行:

PS>  echoargs "   ""1"" 2 3 ""4 5 6""   7 8 9"
Arg 0 is <   1 2 3 4>
Arg 1 is <5>
Arg 2 is <6   7 8 9>

Command line:
"C:\...\Modules\Pscx\Apps\EchoArgs.exe"  "   "1" 2 3 "4 5 6"   7 8 9"
Run Code Online (Sandbox Code Playgroud)

如果您使用该命令行(在由 PowerShell 解析之后),您将在 CMD.exe 中得到相同的结果:

CMD> EchoArgs.exe "   "1" 2 3 "4 5 6"   7 8 9"
Arg 0 is <   1 2 3 4>
Arg 1 is <5>
Arg 2 is <6   7 8 9>

Command line:
C:\...\Modules\Pscx\Apps\EchoArgs.exe  "   "1" 2 3 "4 5 6"   7 8 9"
Run Code Online (Sandbox Code Playgroud)

至于为什么 .NET 或 C++ 启动代码以这种方式解析命令行,我并不完全确定。这个MSDN 主题对此进行了一些介绍,如果您查看该主题底部的示例,您将看到一些同样奇怪的解析行为,例如a\\\b d"e f"g h给出a\\\b,de fgh