两种创建数组的方法之间的区别

时间:2017-11-06 13:35:28

标签: arrays powershell

我刚刚在Powershell中遇到有关数组的问题,我只是想了解发生了什么。

为什么会这样:

$Path = 'C:\'
$File1 = $Path + 'File1.txt'
$File2 = $Path + 'File2.txt'
$Files= @($File1, $File2)

与此不同:

$Path = 'C:\'
$Files= @($Path + 'File1.txt', $Path + 'File2.txt')

因为第一个,我可以像这样解析它:

$Files| ForEach-Object {
    $Test = Get-Item -Path $_
}

但是我不能用第二个,除非我这样创建它:

$Path = 'C:\'
$Files = @(($Path + 'File1.txt'), ($Path + 'File2.txt'))

是否有另一种干净的方法来创建数组? 谢谢!

1 个答案:

答案 0 :(得分:3)

在第一个实例中,您将创建一个包含2个元素的数组。在第二个实例中,您将创建一个包含单个元素的数组。 PowerShell不会将$Path + 'File1.txt'作为一个处理。

您可以使用$Files.Count检查数组中的元素数量:第一种方法会显示2,第二种方法会显示1

您可以使用已识别的方括号()或使用{}包装变量来解决此问题:

$Files= @("${Path}File1.txt", "${Path}File2.txt")

如果您计划在ForEach-Object中使用此计划,则可以在该循环中使用$Path

$Path = 'C:\'
$Files= @('File1.txt', 'File2.txt')

$Files| ForEach-Object {
    $Test = Get-Item -Path "${Path}$_"
}

<强>附录

根据培根比特的有用评论,这归因于Operator Precedence,的优先级高于+

@($Path + 'File1.txt', $Path + 'File2.txt')

变为:

($Path) + ('File1.txt', $Path) + ('File2.txt')

而不是:

($Path + 'File1.txt'), ($Path + 'File2.txt')