如何在将PowerShell数组传递给函数时展开它

Cha*_*lie 7 arrays powershell

我有两个PowerShell函数,第一个调用第二个函数.它们都带有N个参数,其中一个被定义为简单地添加一个标志并调用另一个.以下是示例定义:

function inner
{
  foreach( $arg in $args )
    {
      # do some stuff
    }
}

function outer
{
  inner --flag $args
}
Run Code Online (Sandbox Code Playgroud)

用法看起来像这样:

inner foo bar baz
Run Code Online (Sandbox Code Playgroud)

或这个

outer wibble wobble wubble
Run Code Online (Sandbox Code Playgroud)

目标是后一个例子等同于

inner --flag wibble wobble wubble
Run Code Online (Sandbox Code Playgroud)

问题:inner如此处所定义,后者实际上导致传递两个参数:第一个是"--flag",第二个是包含"wibble","wobble"和"wubble"的数组.我想要的是inner接收四个参数:标志和三个原始参数.

所以我想知道的是如何说服powershell在传递它之前扩展$ args数组inner,将其作为N个元素而不是单个数组传递.我相信你可以使用splatting运算符(*字符)在Ruby中执行此操作,我很确定PowerShell可以做到这一点,但我不记得如何.

小智 11

PowerSHell V1中没有很好的解决方案.在V2中我们添加了splatting(虽然出于各种原因,我们使用@而不是*来实现此目的).这是它的样子:

PS(STA-ISS)(2)> function foo($ x,$ y,$ z){"x:$ xy:$ yz:$ z"}

PS(STA-ISS)(3)> $ a = 1,2,3

PS(STA-ISS)(4)> foo $ a#作为单个arg传递

x:1 2 3 y:z:

PS(STA-ISS)(5)> foo @a #splatted

x:1 y:2 z:3