2015-09-13 80 views
2

PowerShell中+,運營商之間的確切區別是什麼?例如,當只是試圖連接兩個陣列都產生相同的輸出,但我不能一個,操作,只有+操作的結果的排序結果:瞭解PowerShell運營商+和

$a = Get-ChildItem C:\ 
$b = Get-ChildItem C:\Windows 
# Does not sort anything, actually is the same output as $a, $b 
$a , $b | sort 
# Sort actually works 
$a + $b | sort 

什麼混淆我更是事實,這兩個運營商返還相同種類:

PS C:\> ($a,$b).getType().Name 
Object[] 
PS C:\> ($a+$b).getType().Name 
Object[] 
+0

我有一個懷疑:','的結果被包裹到一個額外的數組中,而'+'的輸出不是。 –

回答

4

無論是運營商將產生在方案中的數組,但逗號操作符不進行內插數組,所以你得到數組有數組,而+操作將第二個數組的元素附加到第一個數組的元素。它變得更清晰,當你輸出JSON格式的數組:

PS C:\>$a = 1, 2 
PS C:\>$b = 3, 4 
PS C:\>($a, $b) | ConvertTo-Json 
[ 
    { 
     "value": [ 
         1, 
         2 
        ], 
     "Count": 2 
    }, 
    { 
     "value": [ 
         3, 
         4 
        ], 
     "Count": 2 
    } 
] 
PS C:\>($a + $b) | ConvertTo-Json 
[ 
    1, 
    2, 
    3, 
    4 
]

你不能只是胡亂使用+運營商,不過,因爲它的負荷過重,會產生依賴於第一操作數的類型不同的結果:

PS C:\>1 + @(3, 4)   # integer addition (fails) 
Method invocation failed because [System.Object[]] does not contain a method 
named 'op_Addition'. 
At line:1 char:7 
+ 1 + @(3, 4) 
+  ~~~~ 
    + CategoryInfo   : InvalidOperation: (op_Addition:String) [], ... 
    + FullyQualifiedErrorId : MethodNotFound 

PS C:\>"1" + @(3, 4)  # string concatenation (succeeds) 
13 4 
PS C:\>@(1) + @(3, 4)  # array append (succeeds) 
1 
3 
4