Powershell:为什么我需要在$ args中转义双破折号参数?

cdl*_*ard 4 powershell command-line

这是一个非常简单的示例脚本:

function fun () { "AAA $args ZZZ" }
fun a b c
fun a - b
fun a -- b
fun a '--' b
fun a --- b
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

AAA a b c ZZZ
AAA a - b ZZZ
AAA a b ZZZ
AAA a -- ZZZ
AAA a --- b ZZZ
Run Code Online (Sandbox Code Playgroud)

我显然需要逃脱双击.为什么?

我正在为一套脚本编写一个powershell包装器,其中一些脚本为" - "赋予特定含义.我如何通过未经修改的传递?

rav*_*nth 6

- 被认为是一个特殊的"参数结束"参数.

来自Bruce Payette的Windows PowerShell in Action:

引号使参数绑定器不将引用的字符串视为参数.另一种不经常使用的方法是使用特殊的"end-ofparameters"参数,它是两个连字符背靠背( - ).

此序列之后的所有内容都将被视为参数,即使它看起来像参数.例如,使用 - 您还可以在不使用引号的情况下写出字符串-InputObject:

PS (3) > Write-Output -- -InputObject
Run Code Online (Sandbox Code Playgroud)

将导致-inputobject作为输出.