繁体   English   中英

PowerShell中的数组数组:缺少逗号会产生意外行为

[英]Array of arrays in PowerShell: missing comma gives unexpected behavior

在PowerShell 4.0中,如果运行以下脚本,则为Win 8.1:

$x = @(
    ("one","two","three"),
    ("four", "five", "six"),
    ("seven", "eight", "nine")
    )

write-host $x.Count
$x | % {write-host "$_"}

我懂了

3
one two three
four five six
seven eight nine

如果我运行完全相同的脚本,但是在三个子数组的每一个之间删除了逗号:

$x = @(
    ("one","two","three")
    ("four", "five", "six")
    ("seven", "eight", "nine")
    )

write-host $x.Count
$x | % {write-host "$_"}

我懂了

9
one
two
three
four
five
six
seven
eight
nine

有趣的是,在删除逗号的版本中,换行符必须存在。 如果删除它们,该脚本将无法运行,并给出“表达式或语句中的异常标记'(')”作为原因。

为什么会这样? 我的期望是,无论是否存在换行符,它都不应完全没有逗号运行。 当我在相似值的长数组的底部添加一个新的子数组值但忘记了逗号时,这让我有点烦恼,最后的值搞砸了。

在第一个示例中,您正在定义一个二维数组,并且您获得了预期的行为。

在第二个示例中,您正在执行的操作是定义一维数组,基本上与此相同:

$x = @("one","two","three","four","five","six","seven","eight","nine")

除非您使用括号将其分组。 这就是为什么您还需要换行的原因,因为PowerShell会将括号内的内容解析为“一个”,就像它执行任何命令一样。 没有换行符(或';'),您不能在同一行上有多个命令

要验证,请尝试以下操作:

$x = @(("one","two","three");("four","five","six");("seven","eight","nine"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM