为什么要给 $ 赋值?崩溃Powershell?

Why does assigning a value to $? crash Powershell?

运行 powershell 中的代码 $? = $true 使程序崩溃并显示 "powershell has stopped working" windows 错误消息。

一些内置函数如 $true$host 抛出错误:Cannot overwrite variable true because it is read-only or constant.。其他如 $myinvocation$null 将被忽略。为什么 $? 不同?是否有关于哪些内置函数有哪些响应的文档? help about_automatic_variables 没有任何详细信息。

我目前是 运行 5.1 版。我还尝试使用 powershell -version $n '$? = $true' 和版本 3-5 全部崩溃。有趣的是,版本 1 和 2 没有;他们抛出只读变量错误。

看起来这是一个 known bug。 该修复程序已添加到当前可用的版本 (6.0) 中。您可以找到相关的拉取请求 here.

我的直觉告诉我,不同行为的原因(与其他自动变量相比)是因为您和系统几乎同时尝试写入此变量。尽管我不知道你为什么要写信给它(我怀疑这一切都是从一些 if ($? = $true) 开始的......),但我确实同意其中一个真的很讨厌。