引擎盖下$ true和$ false之间的差异

Mat*_*att 6 powershell boolean

所以我正在使用PowerShell,并在下面的代码中遇到了一些令人惊讶的结果

function returns_true(){
    return $true
}

function returns_false(){
    return $false
}

if (returns_true -eq $true){
    Write-Host "I return true"
}

if (returns_false -eq $false){
    Write-Host "I return false"
}
$myval = returns_false
Write-Host $myval
Run Code Online (Sandbox Code Playgroud)

运行它给我以下输出

I return true
False
Run Code Online (Sandbox Code Playgroud)

我原以为这会回来

I return true
I return false
False
Run Code Online (Sandbox Code Playgroud)

要不就

False
Run Code Online (Sandbox Code Playgroud)

有人可以解释这里发生了什么.什么是PowerAhell,让我来评价引擎盖下做的-eq $true,而不是-eq $false当我返回$true$false

Mik*_*ard 6

这里实际发生的是解析器看到-eq $ true和-eq $ false作为传递给函数的参数.

要查看是这种情况,请将[CmdletBinding()] Param()添加到这样的函数中:

function returns_true(){
[CmdletBinding()]
Param()
    return $true
}
Run Code Online (Sandbox Code Playgroud)

  • 另一种验证意外行为的方法:将主体更改为`$ args`,它将在单独的行上返回`-eq`和`$ true` (3认同)