How can I check if a string is null or empty in PowerShell?

后端 未结 11 1027
没有蜡笔的小新
没有蜡笔的小新 2020-12-02 04:49

Is there a built-in IsNullOrEmpty-like function in order to check if a string is null or empty, in PowerShell?

I could not find it so far and if there i

相关标签:
11条回答
  • 2020-12-02 05:05

    In addition to [string]::IsNullOrEmpty in order to check for null or empty you can cast a string to a Boolean explicitly or in Boolean expressions:

    $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" }
    

    Output:

    False
    string is null or empty
    
    False
    string is null or empty
    
    True
    string is not null or empty
    
    0 讨论(0)
  • 2020-12-02 05:05

    Personally, I do not accept a whitespace ($STR3) as being 'not empty'.

    When a variable that only contains whitespaces is passed onto a parameter, it will often error that the parameters value may not be '$null', instead of saying it may not be a whitespace, some remove commands might remove a root folder instead of a subfolder if the subfolder name is a "white space", all the reason not to accept a string containing whitespaces in many cases.

    I find this is the best way to accomplish it:

    $STR1 = $null
    IF ([string]::IsNullOrWhitespace($STR1)){'empty'} else {'not empty'}
    

    Empty

    $STR2 = ""
    IF ([string]::IsNullOrWhitespace($STR2)){'empty'} else {'not empty'}
    

    Empty

    $STR3 = " "
    IF ([string]::IsNullOrWhitespace($STR3)){'empty !! :-)'} else {'not Empty :-('}
    

    Empty!! :-)

    $STR4 = "Nico"
    IF ([string]::IsNullOrWhitespace($STR4)){'empty'} else {'not empty'}
    

    Not empty

    0 讨论(0)
  • 2020-12-02 05:09

    You guys are making this too hard. PowerShell handles this quite elegantly e.g.:

    > $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
    
    0 讨论(0)
  • 2020-12-02 05:11

    PowerShell 2.0 replacement for [string]::IsNullOrWhiteSpace() is string -notmatch "\S"

    ("\S" = any non-whitespace character)

    > $null  -notmatch "\S"
    True
    > "   "  -notmatch "\S"
    True
    > " x "  -notmatch "\S"
    False
    

    Performance is very close:

    > Measure-Command {1..1000000 |% {[string]::IsNullOrWhiteSpace("   ")}}
    TotalMilliseconds : 3641.2089
    
    > Measure-Command {1..1000000 |% {"   " -notmatch "\S"}}
    TotalMilliseconds : 4040.8453
    
    0 讨论(0)
  • 2020-12-02 05:15
    # cases
    $x = null
    $x = ''
    $x = ' '
    
    # test
    if ($x -and $x.trim()) {'not empty'} else {'empty'}
    or
    if ([string]::IsNullOrWhiteSpace($x)) {'empty'} else {'not empty'}
    
    0 讨论(0)
提交回复
热议问题