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

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

以下是示例代码:

function fun () { "AAA $args ZZZ" }
fun a b c
fun a - b
fun a -- b
fun a '--' b
fun a --- b

我得到的结果是:
AAA a b c ZZZ
AAA a - b ZZZ
AAA a b ZZZ
AAA a -- ZZZ
AAA a --- b ZZZ

我显然需要转义双破折号。为什么?

我正在编写一个包装一系列脚本的PowerShell程序,其中一些脚本将“--”分配给特定含义。如何无修改地传递它?


这是一种重复的问题,请参见:https://dev59.com/ME7Sa4cB1Zd3GeqP2lav - Ocaso Protal
1个回答

9
--被认为是一种特殊的“参数结束”参数。
来自Bruce Payette的Windows PowerShell in Action:
引号使参数绑定器不会将带引号的字符串视为参数。另一种不太常用的方法是使用特殊的“参数结束”参数,即双连字符(--)
这个序列后面的所有内容都将被视为一个参数,即使它看起来像一个参数。例如,使用--,你也可以不用引号写出字符串 -InputObject:
PS (3) > Write-Output -- -InputObject

将结果作为-outputobject的输出。

1
我仍然想将所有原始的$args传递给另一个命令。有任何明智的解决方法来处理这种行为吗? - cdleonard
你已经在使用那个了。单引号或双引号。如果没有某种转义方式,你不能使用--。 - ravikanth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接