"true" 搞乱了 Powershell 中的转义码处理?

"true" messes up escape code handling in Powershell?

我刚才在我的 Powershell 脚本中观察到一些奇怪的东西,我最终将它缩小到我的代码中的一个错误,就是这一行:

$AnyExecuted = true

应该是

$AnyExecuted = $true

然而,这一行混淆了 Windows 10 上的标准 Powershell Core windows 以及 Windows 终端中的转义码处理:

有人知道为什么会这样吗? true 表达式是什么?我找不到任何提及,为什么它会对 Powershell 的输出产生这种影响?

注意,显然我更新了我的脚本以使用 $true,这正是我想要的,这个问题只是关于 true 是什么。

执行时

$AnyExecuted = $true

$AnyExecuted 将是 Boolean 类型,您的脚本可能 运行 符合预期。如果你执行

$AnyExecuted = true

相反,如果没有抛出任何错误,那么就有一个名称为 true 的别名、cmdlet 或可执行文件可用。它在默认 Windows 10 个安装中不可用。

因为它不会在您这边引发错误,您可能 true 以某种方式可用。您可以使用 Get-Command true 检查。使用 MinGW 环境,使 true.exe 可用,例如。

使用你仍然未知的true“东西”的结果可能确实会导致意想不到的行为。要调查 true 的结果,您可以在您的系统上评估 (true).GetType()