You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PowerShell的-and运算符要求函数参数需加括号?

PowerShell中-and运算符与无括号函数调用的解析问题

问题根源

第五种情况TrueFunction -and (-not (TrueFunction))输出异常的核心原因是PowerShell的命令解析优先级规则:当函数调用不添加括号时,PowerShell会把后续的-and识别为该函数的命名参数,而非逻辑运算符。

具体解析逻辑

  1. 无括号的TrueFunction属于PowerShell的命令式调用语法,此时紧跟的-and会被当作函数的参数名,(-not (TrueFunction))则被当作该参数的传入值。
  2. 由于TrueFunction没有定义任何参数,PowerShell会直接忽略这些未声明的参数,执行函数本身并返回$true,这就是第五行输出True的原因。

对比验证

  • 第四种情况((TrueFunction) -and (-not (TrueFunction)))中,(TrueFunction)用括号包裹,被强制解析为表达式,此时-and会被正确识别为逻辑运算符,执行短路逻辑后返回$false。
  • 第六种情况($true -and (-not (TrueFunction)))中,左侧是字面量$true(属于表达式),-and同样被正确识别为逻辑运算符,最终返回$false。

解决方法

当函数调用需要作为逻辑运算符的操作数时,必须用括号将函数调用包裹,强制PowerShell将其解析为表达式而非命令调用。

修改第五种情况的代码如下:

Write-Host "Five:  " ((TrueFunction) -and (-not (TrueFunction)))

即可得到预期的False输出。

内容的提问来源于stack exchange,提问作者hpshelton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:27:15