任何人都可以解释为什么当从powershell函数返回$ false时你无法使用比较运算符来确定函数是否返回$ false但是当你返回$ true时,比较评估为$ true?
function boolean {
return $false
}
boolean -eq $false
function boolean {
return $true
}
boolean -eq $true
>>>False
>>>True
Run Code Online (Sandbox Code Playgroud)
您可以通过将函数调用设置为变量来解决此问题,但我想知道是否有人可以解释这里发生的事情?
function boolean {
return $false
}
$bool = boolean
$bool -eq $false
function boolean {
return $true
}
$bool = boolean
$bool -eq $true
>>>True
>>>True
Run Code Online (Sandbox Code Playgroud) 我有一个非常基本的PowerShell脚本:
Param(
[string]$MyWord
)
function myfunc([string] $MyWord) {
Write-Host "$MyWord"
}
myfunc @PSBoundParameters
Run Code Online (Sandbox Code Playgroud)
这是我的执行方式:
PS C:\>。\ test.ps1 -MyWord'hello' 你好
一切都很好。但是,如果-MyWord未指定,我想设置一个默认值。我尝试了这个:
Param(
[string]$MyWord='hi'
)
function myfunc([string] $MyWord) {
Write-Host "$MyWord"
}
myfunc @PSBoundParameters
Run Code Online (Sandbox Code Playgroud)
但是比我的脚本的输出还空。当我不描述参数时,它什么也没打印。(如果我指定了参数,它只会显示“ hello”)。我也尝试过:
Param(
[string]$MyWord
)
function myfunc([string] $MyWord) {
[string]$MyWord='hi'
Write-Host "$MyWord"
}
myfunc @PSBoundParameters
Run Code Online (Sandbox Code Playgroud)
但是,当然,输出总是“ hi”而不是“ hello”。即使使用参数执行脚本-MyWord 'hello'
有人可以解释我在做什么吗?
当我不使用该功能时,它按预期工作:
Param(
[string]$MyWord='hi'
)
Write-Host $MyWord
Run Code Online (Sandbox Code Playgroud)
输出:
PS C:\>。\ test.ps1 -MyWord'你好' 哈罗 PS C:\>。\ test.ps1 你好