[英]PowerShell foreach() multidimensional array based on first element
[英]Array parameter in a powershell function does not load the first element
我有一个函数,需要一个字符串参数和一个字符串参数数组
Function w
{
param([string]$format, [string[]]$args)
Write-Host $format
Write-Host $args
}
然后,我通过以下方式执行该功能:
w "formatParam" "args1" "args2"
w "formatParam" "args1" "args2" "args3"
w "formatParam" "args1" "args2" "args3" "args4"
w "formatParam" "args1" "args2" "args3" "args4" "args5"
从输出中可以看出,字符串数组似乎未加载第一个参数,即要放入数组中:
formatParam
args2
formatParam
args2 args3
formatParam
args2 args3 args4
formatParam
args2 args3 args4 args5
有任何想法吗?
它是参数的名称“ args”。 $Args
是一个自动变量,因此不应在其用途之外使用。 从Get-Help about_Automatic_Variables
:
包含未声明的参数和/或参数值的数组,这些数组将传递给函数,脚本或脚本块。 创建函数时,可以通过使用
param
关键字或通过在函数名称后的括号中添加逗号分隔的参数列表来声明参数。
如果更改参数的名称,然后在第二个参数的参数之间添加逗号,以使其成为实际数组,则它将起作用。
$args
已经是powershell中的一个特殊变量; 您不应该将其声明为参数,因为您要覆盖它。 让我们命名其他名称,例如$remaining
。
您传递参数的方式(带空格)使它们看起来像不同的参数。 要传递数组,您必须像这样调用它:
w "formatParam" "args1" "args2","args3","args4","args5"
用逗号。 由于那可能不是您想要的,因此您需要重写该函数。
Function w
{
param(
[string]$format,
[Parameter(
ValueFromRemainingArguments=$true
)
[string[]]
$remaining
)
Write-Host $format
Write-Host $remaining
}
现在,您应该可以这样称呼它:
w "formatParam" "args1" "args2" "args3" "args4" "args5"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.