了解 PowerShell 运算符 + 和 ,
Understanding PowerShell operators + and ,
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
更让我困惑的是,两个运算符 return 是同一类型:
PS C:\> ($a,$b).getType().Name
Object[]
PS C:\> ($a+$b).getType().Name
Object[]
两个运算符都会在您的场景中生成一个数组,但逗号运算符不会插入数组,因此您会在那里得到一个数组数组,而 +
运算符会附加第二个数组的元素数组到第一个数组的那些。当您以 JSON 格式输出数组时,它会变得更加清晰:
PS C:\> <b>$a = 1, 2</b>
PS C:\> <b>$b = 3, 4</b>
PS C:\> <b>($a, $b) | ConvertTo-Json</b>
[
{
"value": [
1、
2个
],
"Count": 2
},
{
"value": [
3、
4个
],
"Count": 2
}
]
PS C:\> <b>($a + $b) | ConvertTo-Json</b>
[
1、
2、
3、
4个
]
不过,您不能不加选择地使用 +
运算符,因为它已过载并且会根据第一个操作数的类型产生不同的结果:
PS C:\> <b>1 + @(3, 4)</b> <i>#整数加法(失败)</i>
方法调用失败,因为 [System.Object[]] 不包含方法
命名为 'op_Addition'。
在 line:1 char:7
+ 1 + @(3, 4)
+ ~~~~
+ CategoryInfo:InvalidOperation:(op_Addition:字符串)[],...
+ FullyQualifiedErrorId : MethodNotFound
PS C:\> <b>"1" + @(3, 4)</b> <i># 字符串连接(成功)</i>
13 4
PS C:\> <b>@(1) + @(3, 4)</b> <i># 数组追加(成功)</i>
1个
3个
4
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
更让我困惑的是,两个运算符 return 是同一类型:
PS C:\> ($a,$b).getType().Name
Object[]
PS C:\> ($a+$b).getType().Name
Object[]
两个运算符都会在您的场景中生成一个数组,但逗号运算符不会插入数组,因此您会在那里得到一个数组数组,而 +
运算符会附加第二个数组的元素数组到第一个数组的那些。当您以 JSON 格式输出数组时,它会变得更加清晰:
PS C:\> <b>$a = 1, 2</b>
PS C:\> <b>$b = 3, 4</b>
PS C:\> <b>($a, $b) | ConvertTo-Json</b>
[
{
"value": [
1、
2个
],
"Count": 2
},
{
"value": [
3、
4个
],
"Count": 2
}
]
PS C:\> <b>($a + $b) | ConvertTo-Json</b>
[
1、
2、
3、
4个
]
不过,您不能不加选择地使用 +
运算符,因为它已过载并且会根据第一个操作数的类型产生不同的结果:
PS C:\> <b>1 + @(3, 4)</b> <i>#整数加法(失败)</i>
方法调用失败,因为 [System.Object[]] 不包含方法
命名为 'op_Addition'。
在 line:1 char:7
+ 1 + @(3, 4)
+ ~~~~
+ CategoryInfo:InvalidOperation:(op_Addition:字符串)[],...
+ FullyQualifiedErrorId : MethodNotFound
PS C:\> <b>"1" + @(3, 4)</b> <i># 字符串连接(成功)</i>
13 4
PS C:\> <b>@(1) + @(3, 4)</b> <i># 数组追加(成功)</i>
1个
3个
4