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

PowerShell中Null合并运算符`??`为何未按预期工作?

原因解释

核心问题在于$args的本质和??运算符的判断逻辑差异:

  1. $args的实际类型:当函数无参数调用时,$args是一个长度为0的空数组([System.Object[]]),而非$null。
  2. ??的判断规则:??空合并运算符仅在左操作数**严格等于$null**时,才会返回右操作数。空数组@()与$null并不相等,因此$args ?? './'会直接返回空数组。
  3. 字符串展开的行为:在字符串中展开空数组时,PowerShell会将其解析为空字符串,这就是场景1中c2输出code 的原因。

对比来看,c1和c3使用的三元运算符? :,判断的是值在布尔上下文中的真假:空数组在布尔判断中会被视为$false,因此会返回'./',符合预期。

如果要让c2的行为与c1、c3一致,可以修改为判断$args是否为空:

# 利用布尔上下文判断
function c2 { "code $((-not $args) ? './' : $args)" }
# 或更明确的长度判断
function c2 { "code $($args.Count -eq 0 ? './' : $args)" }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:48:14