Null coalescing in powershell

后端 未结 10 1135
遇见更好的自我
遇见更好的自我 2020-11-29 21:57

Is there a null coalescing operator in powershell?

I\'d like to be able to do these c# commands in powershell:

var s = myval ?? \"new value\";
var x         


        
10条回答
  •  迷失自我
    2020-11-29 22:32

    Often I find that I also need to treat empty string as null when using coalesce. I ended up writing a function for this, which uses Zenexer's solution for coalescing for the simple null coalesce, and then used Keith Hill's for null or empty checking, and added that as a flag so my function could do both.

    One of the advantages of this function is, that it also handles having all elements null (or empty), without throwing an exception. It can also be used for arbitrary many input variables, thanks to how PowerShell handles array inputs.

    function Coalesce([string[]] $StringsToLookThrough, [switch]$EmptyStringAsNull) {
      if ($EmptyStringAsNull.IsPresent) {
        return ($StringsToLookThrough | Where-Object { $_ } | Select-Object -first 1)
      } else {
        return (($StringsToLookThrough -ne $null) | Select-Object -first 1)
      }  
    }
    

    This produces the following test results:

    Null coallesce tests:
    1 (w/o flag)  - empty/null/'end'                 : 
    1 (with flag) - empty/null/'end'                 : end
    2 (w/o flag)  - empty/null                       : 
    2 (with flag) - empty/null                       : 
    3 (w/o flag)  - empty/null/$false/'end'          : 
    3 (with flag) - empty/null/$false/'end'          : False
    4 (w/o flag)  - empty/null/"$false"/'end'        : 
    4 (with flag) - empty/null/"$false"/'end'        : False
    5 (w/o flag)  - empty/'false'/null/"$false"/'end': 
    5 (with flag) - empty/'false'/null/"$false"/'end': false
    

    Test code:

    Write-Host "Null coalesce tests:"
    Write-Host "1 (w/o flag)  - empty/null/'end'                 :" (Coalesce '', $null, 'end')
    Write-Host "1 (with flag) - empty/null/'end'                 :" (Coalesce '', $null, 'end' -EmptyStringAsNull)
    Write-Host "2 (w/o flag)  - empty/null                       :" (Coalesce('', $null))
    Write-Host "2 (with flag) - empty/null                       :" (Coalesce('', $null) -EmptyStringAsNull)
    Write-Host "3 (w/o flag)  - empty/null/`$false/'end'          :" (Coalesce '', $null, $false, 'end')
    Write-Host "3 (with flag) - empty/null/`$false/'end'          :" (Coalesce '', $null, $false, 'end' -EmptyStringAsNull)
    Write-Host "4 (w/o flag)  - empty/null/`"`$false`"/'end'        :" (Coalesce '', $null, "$false", 'end')
    Write-Host "4 (with flag) - empty/null/`"`$false`"/'end'        :" (Coalesce '', $null, "$false", 'end' -EmptyStringAsNull)
    Write-Host "5 (w/o flag)  - empty/'false'/null/`"`$false`"/'end':" (Coalesce '', 'false', $null, "$false", 'end')
    Write-Host "5 (with flag) - empty/'false'/null/`"`$false`"/'end':" (Coalesce '', 'false', $null, "$false", 'end' -EmptyStringAsNull)
    

提交回复
热议问题