about_Operator_Precedence
简短说明
按优先顺序列出了 PowerShell 运算符。
长说明
借助 PowerShell 运算符,可以构造简单但功能强大的表达式。 本主题按优先顺序列出了各个运算符。 优先顺序是当多个运算符出现在同一表达式中时,PowerShell 计算运算符的顺序。
当运算符具有相同优先级时,PowerShell 会按它们在表达式中的顺序从左到右计算它们。 例外情况是赋值运算符、强制转换运算符和求反运算符(!
、-not
、-bnot
),这些运算符是从右到左计算。
可以使用封闭符号(如括号)替代标准优先顺序,并强制 PowerShell 在未封闭的部分之前计算表达式的封闭部分。
在以下列表中,运算符按计算顺序列出。 同一行或同一组中的运算符具有相同的优先级。
“运算符”列中列出了运算符。 “参考”列中列出了介绍运算符的 PowerShell 帮助主题。 若要显示主题,请键入 get-help <topic-name>
。
OPERATOR | 引用 |
---|---|
$() @() () @{} |
about_Operators |
. ?. (成员访问) |
about_Operators |
:: (静态) |
about_Operators |
[0] ?[0] (索引运算符) |
about_Operators |
[int] (强制转换运算符) |
about_Operators |
-split (一元) |
about_Split |
-join (一元) |
about_Join |
, (逗号运算符) |
about_Operators |
++ -- |
about_Assignment_Operators |
! -not |
about_Logical_Operators |
.. (范围运算符) |
about_Operators |
-f (格式运算符) |
about_Operators |
- (一元/求反) |
about_Arithmetic_Operators |
* / % |
about_Arithmetic_Operators |
+ - |
about_Arithmetic_Operators |
下面的一组运算符具有相同的优先级。 它们的区分大小写和显式不区分大小写的变体具有相同的优先级。
OPERATOR | 引用 |
---|---|
-split (二元) |
about_Split |
-join (二元) |
about_Join |
-is -isnot -as |
about_Type_Operators |
-eq -ne -gt -ge -lt -le |
about_Comparison_Operators |
-like -notlike |
about_Comparison_Operators |
-match -notmatch |
about_Comparison_Operators |
-in -notIn |
about_Comparison_Operators |
-contains -notContains |
about_Comparison_Operators |
-replace |
about_Comparison_Operators |
列表在此处继续,并按优先级顺序列出以下运算符:
OPERATOR | 引用 |
---|---|
-band -bnot -bor -bxor -shr -shl |
about_Arithmetic_Operators |
-and -or -xor |
about_Logical_Operators |
下列各项不是真正的运算符。 它们是 PowerShell 命令语法的一部分,而不是表达式语法的一部分。 赋值始终是最后一个发生的操作。
SYNTAX | 引用 |
---|---|
. (点式寻源) |
about_Operators |
& (调用) |
about_Operators |
? <if-true> : <if-false> (三元运算符) |
about_Operators |
?? (空值合并运算符) |
about_Operators |
| (管道运算符) |
about_Operators |
> >> 2> 2>> 2>&1 |
about_Redirection |
&& || (管道链运算符) |
about_Operators |
= += -= *= /= %= ??= |
about_Assignment_Operators |
示例
以下两个命令显示了算术运算符以及使用括号强制 PowerShell 首先计算表达式封闭部分的效果。
PS> 2 + 3 * 4
14
PS> (2 + 3) * 4
20
以下示例从本地目录获取只读文本文件,并将其保存在 $read_only
变量中。
$read_only = Get-ChildItem *.txt | Where-Object {$_.isReadOnly}
它等效于以下示例。
$read_only = ( Get-ChildItem *.txt | Where-Object {$_.isReadOnly} )
由于管道运算符 (|
) 的优先级高于赋值运算符 (=
),因此 Get-ChildItem
cmdlet 获取的文件将发送到 Where-Object
cmdlet 进行筛选,然后再将其赋给 $read_only
变量。
以下示例演示了索引运算符优先于强制转换运算符。
此表达式创建一个包含三个字符串的数组。 然后,它使用值为 0 的索引运算符来选择数组中的第一个对象,即第一个字符串。 最后,它将所选对象强制转换为字符串。 在本例中,强制转换不起作用。
PS> [string]@('Windows','PowerShell','2.0')[0]
Windows
此表达式使用括号来强制在选择索引之前执行转换运算。 因此,整个数组被强制转换为一个(单个)字符串。 然后,索引运算符选择字符串数组中的第一项,即第一个字符。
PS> ([string]@('Windows','PowerShell','2.0'))[0]
W
在以下示例中,由于 -gt
(大于)运算符的优先级高于 -and
(逻辑 AND)运算符,因此表达式的结果为 FALSE。
PS> 2 -gt 4 -and 1
False
它等效于以下表达式。
PS> (2 -gt 4) -and 1
False
如果 -and 运算符的优先级较高,则答案将为 TRUE。
PS> 2 -gt (4 -and 1)
True
不过,此示例演示了管理运算符优先级时的一个重要原则。 当表达式难以解释时,可以使用括号强制确保计算顺序,即使它强制实施默认运算符优先级时也是如此。 括号可以使正在阅读和维护你的脚本的人明白你的意图。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈