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'))