Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 多维数组初始化似乎对空格很敏感_Powershell_Declaration - Fatal编程技术网

Powershell 多维数组初始化似乎对空格很敏感

Powershell 多维数组初始化似乎对空格很敏感,powershell,declaration,Powershell,Declaration,我注意到这两个声明之间的差异,其中只有逗号的位置发生了变化: $a = @( @('a','b'), @('c','d')) $b = @( @('a','b') , @('c','d')) 在本例中,$a.length计算结果为2,$b.length计算结果为3。$b的第一个子数组已展平 这是一个功能,我在哪里可以找到它的文档 顺便说一下,$pVersionTable: Name Value ----

我注意到这两个声明之间的差异,其中只有逗号的位置发生了变化:

$a = @( @('a','b'),
        @('c','d'))

$b = @( @('a','b')
      , @('c','d'))
在本例中,
$a.length
计算结果为2,
$b.length
计算结果为3。
$b
的第一个子数组已展平

这是一个功能,我在哪里可以找到它的文档

顺便说一下,
$pVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

这是因为
@('a','b')
将两个字符串
a
b
推入数组
$b
,而使用逗号强制
@('c','d')
被推入
$b
数组

例如:

$b = @( @('a','b')
      , @('c','d'))

$b | foreach { Write-Host "Item: $_"}
输出:

Item: a
Item: b
Item: c d
如果你看看这些类型:

$b | foreach { $_.GetType()}
你会得到:

IsPublic IsSerial Name     BaseType     
-------- -------- ----     --------     
True     True     String   System.Object
True     True     String   System.Object
True     True     Object[] System.Array 

要强制
$b
包含两个
数组
,请使用逗号二进制运算符:

$b = @(@('a','b'),@('c','d'))

对不起,我不明白你的答案<代码>$b=@(@('a','b'),@('c','d'))
包含两个不带逗号的数组。在逗号前和逗号后插入换行符有什么区别?你说得对。这是因为在本例中,
逗号
用作二进制运算符,请参见我的编辑。这是否意味着二进制运算符不能跟在换行符后面?是的。您可以验证,如果在第一行末尾添加反勾号,则逗号将被视为二进制运算符
$b = @(@('a','b'),@('c','d'))