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语法我不知道我不小心(错误)使用?
不要在你的参数周围使用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)