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

时间:2018-03-05 16:14:57

标签: 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

运行它会给我以下输出

I return true
False

我期待这回复

I return true
I return false
False

或只是

False

有人可以解释这里发生了什么。当我返回-eq $true-eq $false时,PowerAhell在幕后做什么让我能够评估$true,而不是$false

2 个答案:

答案 0 :(得分:6)

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

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

function returns_true(){
[CmdletBinding()]
Param()
    return $true
}

答案 1 :(得分:3)

更好地解释发生了什么: https://stackoverflow.com/a/49115149/9446818

圆括号帮助。你真正想要的是:

if ((returns_true) -eq $true){

if ((returns_false) -eq $false){