首页 > 解决方案 > 为什么 '^\S' 不适用于第一个字符或 NULL 值?

问题描述

我有一个变量,它包含一个表中的两个值(使用-expandproperty

$variable = "value1,value2"

我有一个检查以确保$variable没有返回任何 NULL/空值

if(($variable.Split(",") | Where { $_ -match '^\S'}).count -lt 1)
{write "no value!"}
else
{write $variable}

但由于某种原因,即使'^\S'应该只检查第一个字符/索引是否有空格,它也会输出“

没有价值

" 条件结果...应该输出

值1,值2

反而...

不仅如此,如果表列值为NULL,它不会识别它,而是尝试输出第二个条件write $variable

这是为什么??

标签: powershell

解决方案


检查“空或空”的另一种方法是使用[string]IsNulOrEmpty()静态方法。像这样的东西......

$Var1 = "value1,value2"
$Var2 = ''
$Var3 = $Null

$Var1, $Var2, $Var3 |
    ForEach-Object {
        $_
        [string]::IsNullOrEmpty($_)
        }

输出 ...

value1,value2
False

True
True

请注意,最后$Null没有产生新行,而第二项 [一个空字符串] 产生了。


推荐阅读