两个功能参数合并为一个?

Jef*_*f B 0 parameters powershell function

我遇到了一些编写.ps1脚本的奇怪行为.我编写了一个带有两个参数的函数,但由于某种原因,第二个参数始终为null.

经过仔细检查,似乎我的两个参数以某种方式被折叠成第一个.

鉴于以下脚本,我原本预计会有一行输出显示 ...

function Foo($first, $second) {
    echo $first
}

$x = "..."
$y = "why?"

Foo($x, $y)
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个脚本时,我得到了

...
why?
Run Code Online (Sandbox Code Playgroud)

是否有一些PowerShell语法我不知道我不小心(错误)使用?

Kei*_*ill 6

不要在你的参数周围使用parens,也不要使用逗号分隔参数.像调用任何其他PowerShell命令一样调用您的函数 - 使用空格分隔的参数,例如:

foo $x $y
Run Code Online (Sandbox Code Playgroud)

当你把parens放在($ x,$ y)时,PowerShell将它作为单个表达式/参数传递,在这种情况下,一个数组包含两个项目到函数的第一个参数($ x).你可以用它Strict-Mode -Version Latest来警告你,例如:

114> function foo($x,$y){}
115> foo(3,4)
116> Set-StrictMode -Version latest
117> foo(3,4)
The function or command was called as if it were a method. Parameters should be separated by  
spaces. For information about parameters, see the about_Parameters Help topic.
At line:1 char:1
+ foo(3,4)
+ ~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : StrictModeFunctionCallWithParens
Run Code Online (Sandbox Code Playgroud)