如何检查一个string是否为空或在PowerShell中为空?
有没有一个内置的IsNullOrEmpty
类似的函数来检查一个string是否为空或在PowerShell中?
到目前为止我找不到它,如果有内置的方法,我不想为此写一个函数。
您可以使用IsNullOrEmpty
静态方法:
[string]::IsNullOrEmpty(...)
你们这样做太难了 PowerShell处理这个非常优雅,例如:
> $str1 = $null > if ($str1) { 'not empty' } else { 'empty' } empty > $str2 = '' > if ($str2) { 'not empty' } else { 'empty' } empty > $str3 = ' ' > if ($str3) { 'not empty' } else { 'empty' } not empty > $str4 = 'asdf' > if ($str4) { 'not empty' } else { 'empty' } not empty > if ($str1 -and $str2) { 'neither empty' } else { 'one or both empty' } one or both empty > if ($str3 -and $str4) { 'neither empty' } else { 'one or both empty' } neither empty
除了[string]::IsNullOrEmpty
,为了检查null或者空,你可以显式地或者在布尔expression式中将一个string转换为布尔值:
$string = $null [bool]$string if (!$string) { "string is null or empty" } $string = '' [bool]$string if (!$string) { "string is null or empty" } $string = 'something' [bool]$string if ($string) { "string is not null or empty" }
输出:
False string is null or empty False string is null or empty True string is not null or empty
如果它是一个函数中的参数,您可以使用ValidateNotNullOrEmpty
对其进行ValidateNotNullOrEmpty
,如下例所示:
Function Test-Something { Param( [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string]$UserName ) #stuff todo }
就个人而言,我不接受空格($ STR3)为“不空”。
当一个只包含空格的variables被传递给一个参数时,参数值可能不是'$ null',而不是说它可能不是空格,子文件夹,如果子文件夹名称是一个“空白”,所有理由不接受包含空格的string在很多情况下。
我觉得这是实现它的最好方法:
$STR1 = $null IF ([string]::IsNullOrWhitespace($STR1)){'empty'} else {'not empty'}
空
$STR2 = "" IF ([string]::IsNullOrWhitespace($STR2)){'empty'} else {'not empty'}
空
$STR3 = " " IF ([string]::IsNullOrWhitespace($STR3)){'empty !! :-)'} else {'not Empty :-('}
空! 🙂
$STR4 = "Nico" IF ([string]::IsNullOrWhitespace($STR4)){'empty'} else {'not empty'}
不是空的
我有一个PowerShell脚本,我必须在计算机上运行,以至于它没有[String] :: IsNullOrWhiteSpace(),所以我写了自己的。
function IsNullOrWhitespace($str) { if ($str) { return ($str -replace " ","" -replace "`t","").Length -eq 0 } else { return $TRUE } }
检查长度。 如果对象存在,它将有一个长度。
空对象没有长度,不存在,不能被检查。
string对象有一个长度。
问题是:IsNull或IsEmpty,不是IsNull或IsEmpty或IsWhiteSpace
#Null $str1 = $null $str1.length ($str1 | get-member).TypeName[0] # Returns big red error #Empty $str2 = "" $str2.length ($str2 | get-member).TypeName[0] # Returns 0 ## Whitespace $str3 = " " $str3.length ($str3 | get-member).TypeName[0] ## Returns 1
请注意,“if($ str)”和“IsNullOrEmpty”testing在所有情况下都不起作用:$ str = 0的赋值会对两者产生false,并且根据预期的程序语义,这可能会产生一个惊喜。