D.R*_*.R. 26 powershell powershell-4.0
#Requires -Version 2.0
[CmdletBinding()]
Param(
[Parameter()] [string] $MyParam = $null
)
if($MyParam -eq $null) {
Write-Host 'works'
} else {
Write-Host 'does not work'
}
Run Code Online (Sandbox Code Playgroud)
输出"不起作用"=>看起来像字符串隐式地从空转换为空字符串?为什么?如何测试一个字符串是空的还是真的$ null?这应该是两个不同的值!
D.R*_*.R. 29
好的,找到答案@ https://www.codykonior.com/2013/10/17/checking-for-null-in-powershell/
假设:
Param(
[string] $stringParam = $null
)
Run Code Online (Sandbox Code Playgroud)
并且未指定参数(使用默认值):
# will NOT work
if ($null -eq $stringParam)
{
}
# WILL work:
if ($stringParam -eq "" -and $stringParam -eq [String]::Empty)
{
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以指定一个特殊的null类型:
Param(
[string] $stringParam = [System.Management.Automation.Language.NullString]::Value
)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$null -eq $stringParam将按预期工作.
奇怪的!
oɔɯ*_*ɯǝɹ 11
AllowNull如果要允许$null字符串参数,则需要使用该属性:
[CmdletBinding()]
Param (
[Parameter()]
[AllowNull()]
[string] $MyParam
)
Run Code Online (Sandbox Code Playgroud)
请注意,您应该在比较的左侧使用$ null:
if ($null -eq $MyParam)
Run Code Online (Sandbox Code Playgroud)
如果你想让它以可预测的方式工作
| 归档时间: |
|
| 查看次数: |
43770 次 |
| 最近记录: |