“真”会搞乱 Powershell 中的转义码处理?

ang*_*son 2 powershell powershell-core

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

$AnyExecuted = true
Run Code Online (Sandbox Code Playgroud)

应该是

$AnyExecuted = $true
Run Code Online (Sandbox Code Playgroud)

但是,这一行会在 Windows 10 上的标准 Powershell Core 窗口以及 Windows 终端中搞乱转义码处理:

混乱的提示

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

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

sta*_*tor 6

执行时

$AnyExecuted = $true
Run Code Online (Sandbox Code Playgroud)

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

$AnyExecuted = true
Run Code Online (Sandbox Code Playgroud)

取而代之的是没有错误抛出,然后有一个别名,cmdlet 或可执行文件可用,具有名称 true. 它在默认的 Windows 10 安装中不可用。

由于它不会在您这边引发错误,因此您可能true以某种方式可用。您可以使用Get-Command true. 使用 MinGW 环境,使得true.exe可用。

使用您仍然未知的true“事物”的结果可能确实会导致意外行为。要调查结果,true您可以评估(true).GetType()您的系统。

  • 是的,您的答案比我自己的答案包含更多有关如何解决问题的详细信息,因此我删除了我的答案并接受了您的答案。我安装了 Cygwin,其中有“true.exe”。 (2认同)