如何声明字符串数组(在多行上)

时间:2016-06-10 23:37:45

标签: arrays powershell

为什么$dlls.Count会返回单个元素?我尝试声明我的字符串数组:

$basePath = Split-Path $MyInvocation.MyCommand.Path

$dlls = @(
    $basePath + "\bin\debug\dll1.dll",
    $basePath + "\bin\debug\dll2.dll",
    $basePath + "\bin\debug\dll3.dll"
)

3 个答案:

答案 0 :(得分:13)

你应该使用类似的东西:

$dlls = @(
    ($basePath + "\bin\debug\dll1.dll"),
    ($basePath + "\bin\debug\dll2.dll"),
    ($basePath + "\bin\debug\dll3.dll")
)

or

$dlls = @(
    $($basePath + "\bin\debug\dll1.dll"),
    $($basePath + "\bin\debug\dll2.dll"),
    $($basePath + "\bin\debug\dll3.dll")
)

正如你的答案所示,分号也起作用,因为这标志着一个陈述的结束......将被评估,类似于使用括号。

或者,使用另一种模式,如:

$dlls = @()
$dlls += "...."

但是你可能想要使用ArrayList并获得性能优势......

请参阅PowerShell array initialization

答案 1 :(得分:3)

您正在梳理路径,因此使用Join-Path cmdlet:

$dlls = @(
    Join-Path $basePath '\bin\debug\dll1.dll'
    Join-Path $basePath '\bin\debug\dll2.dll'
    Join-Path $basePath '\bin\debug\dll3.dll'
)

您不需要使用任何逗号,分号或括号。 另请参阅this answer

答案 2 :(得分:2)

我找到了,我必须使用分号而不是逗号......任何人都可以解释原因吗?

根据几乎所有来源(例如this one)明确逗号

$basePath = Split-Path $MyInvocation.MyCommand.Path

$dlls = @(
    $basePath + "\bin\debug\dll1.dll";
    $basePath + "\bin\debug\dll2.dll";
    $basePath + "\bin\debug\dll3.dll";
)