Function 两个函数参数合并为一个?
我在写.ps1脚本时遇到了一些奇怪的行为。我编写了一个接受两个参数的函数,但由于某种原因,第二个参数始终为null 仔细观察,我的两个参数似乎以某种方式被压缩为第一个参数 给定以下脚本,我会预期,一行输出显示 函数Foo$first,$second{ echo$first } $x=。。。 $y=为什么? Foo$x$y 但是当我运行这个脚本时,我得到 ... 为什么? 是否有一些我不知道的PowerShell语法我不小心误用了 是否有一些PowerShell语法…我不小心误用了 是的,您没有正确调用函数。在PowerShell中,函数调用不使用括号,也不使用逗号分隔其参数 相反,您可以这样称呼Foo: Foo$x$y 请参见下面的演示: PS>函数Foo$first,$second{ >>echo$first >> } >> PS>$x=。。。 PS>$y=为什么? PS>Foo$x$y ... PS> PS>函数Foo$first,$second{ >>echo$first和$second >> } >> PS>Foo$x$y ... 为什么? PS> 如果您想知道,您当前的代码将PowerShell将$x,$y解释为Foo的单个参数:一个两项数组。因此,它将此数组分配给$first,将$null分配给$second: PS>函数Foo$first,$second{ >>`$first:$$first.Gettype的回显类型 >>echo`$second是`$null:$$second-eq$null >> } >> PS>$x=。。。 PS>$y=为什么? PS>Foo$x$y $first的类型:System.Object[] $second是$null:True PS>Function 两个函数参数合并为一个?,function,powershell,parameters,Function,Powershell,Parameters,我在写.ps1脚本时遇到了一些奇怪的行为。我编写了一个接受两个参数的函数,但由于某种原因,第二个参数始终为null 仔细观察,我的两个参数似乎以某种方式被压缩为第一个参数 给定以下脚本,我会预期,一行输出显示 函数Foo$first,$second{ echo$first } $x=。。。 $y=为什么? Foo$x$y 但是当我运行这个脚本时,我得到 ... 为什么? 是否有一些我不知道的PowerShell语法我不小心误用了 是否有一些PowerShell语法…我不小心误用了 是的,您没有正
不要在参数周围使用括号,也不要使用逗号分隔参数。像调用任何其他PowerShell命令一样调用函数-使用空格分隔的参数,例如:
foo $x $y
当您将参数放在$x附近时,$y PowerShell将其作为单个表达式/参数传递,在本例中,一个包含两个项的数组将传递给函数的第一个参数$x。您可以使用“严格模式-最新版本”在执行此操作时向您发出警告,例如:
114>函数foo$x,$y{}
115>3,4
116>设置StrictMode-最新版本
117>3,4
调用函数或命令时,将其视为方法。参数之间应使用分隔符分隔
空间。有关参数的信息,请参阅关于参数帮助主题。
第1行字符:1
+食物3,4
+ ~~~~~~~~
+CategoryInfo:InvalidOperation::[],运行时异常
+FullyQualifiedErrorId:StrictModeFunctionCallWithParents
在powershell中使用的方式与在其他编程语言中使用的方式不同。这里是数组构造函数 1,2,3.GetType System.Object[] ,'element'.GetType System.Object[] 由于您尚未在参数上指定数据类型,powershell假定它正在处理普通的旧System.Object所有类的超类。然后它获取数组并将其分配给第一个输入参数,因为它是此行中唯一的一个输入参数。它可以做到这一点,因为数组可以扩展为System.Object 此外,不再推荐使用用于定义函数的旧synthax: 函数foo$first,$second{} 编写此命令时,powershell解释器会在内部将其转换为高级函数: 函数foo{ PARAM [参数位置=1] [对象]$first, [参数位置=2] [对象]$秒 开始{
我希望这能澄清一点:对于无意中的编辑,我深表歉意。我讨厌如此随意地重新排列答案。