2016-11-18 32 views
2

数组初始化的工作方式不同在为什么PowerShell的考虑@()语法不同

$scripts = @(
    ("01", "a" , "01_Cleanup") 
    ,("02", "b" , "02_Cleanup") 
); 

输出:

$scripts[0] - "01" 
$scripts[1] - "a" 
$scripts[2] - "01_Cleanup" 
$scripts[3] - "02" 
"b" 
"02_Cleanup" 

请数组初始化的通知 “”:

$scripts = @(
    ("01", "a" , "01_Cleanup"), 
    ("02", "b" , "02_Cleanup") 
); 

输出:

$scripts[0] - "01" 
"a" 
"01_Cleanup" 
$scripts[1] - "02" 
"b" 
"02_Cleanup" 

为什么?由于不同的使用的

+0

你贴的情况下,错误的输出;)无论如何,我认为这是因为一个事实,即没有迹象显示将继续在下一行。所以它将第一个数组视为单独的元素。但我也会对更简洁的答案感兴趣。 – 4c74356b41

回答

7

Comma operator二进制 VS 一元):

作为二进制运算符,逗号创建一个数组。作为一元运算符, 逗号创建一个包含一个成员的数组。将逗号放在 成员之前。


二进制:

@(
    ("01", "a" , "01_Cleanup"), 
    ("02", "b" , "02_Cleanup") 
) | foreach { Write-Host $_}; 

输出:

01 a 01_Cleanup 
02 b 02_Cleanup 

一元:

@(
    ("01", "a" , "01_Cleanup") 
    ,("02", "b" , "02_Cleanup") 
) | foreach { Write-Host $_}; 

输出:

01 
a 
01_Cleanup 
02 b 02_Cleanup 
+0

但为什么它在第二种情况下将第一个数组视为单独的元素? – 4c74356b41

+0

答案涵盖了你的问题。 “作为一元运算符,逗号创建了一个包含一个成员的数组” –

+1

“,我想我的问题更像是为什么这个$ a = @(('a','b'))被视为2个单独的元素。我可以创建一个问题,如果你想 – 4c74356b41

相关问题