PowerShell: if文でTrue・False・Nullを判定する
PowerShellのif文の条件式で、 変数や関数の戻り値が True, False, Nullかどうかを判定する方法を紹介します。
if文の条件式でTrue・Falseを判定
True・Falseの真偽値を判定する場合、 変数やメソッドを条件式の丸括弧()の中にそのまま単独で記述するのが一般的です。
例えば、真偽値型の変数$blnがTrueかFalseかを判定するコードは 次のように丸括弧()の中に「$bln」と記述します。
if ($bln) { # Trueの場合 } else { # Falseの場合 }
Falseの場合だけを知りたい時は、 論理否定演算子の「-not」か「-!」を$blnの前に記述します。
if (-! $bln){ # Falseの場合 Write-Host "False" }
あまり使いませんが、 True・Falseを表す$true、$falseを条件式の中で記述しても構いません。 変数$blnがFalseかどうかを知りたい場合のコードは次の通りです。
if ($bln -eq $false){ # Falseの場合 Write-Host "False" }
注意点としてPowerShellでは真偽値を表す時にTrue、Falseと記述するとエラーになります。 $true、$falseと先頭に$ドル記号を付ける必要があり、 どちらもPowerShellのシェル変数の1つです。
if文の条件式でNullを判定
条件式でNullかどうかを判定する場合、 シェル変数$nullと比較演算子を使います。 次のコードは変数$aがNullかどうかを判定しています。
if ($null -eq $a){ Write-Host "Null" } else { Write-Host "Not Null" }
注意点が2点あって1つ目は、 先程のTrue・Falseと同じようにNullではなく$nullと記述します。 $nullもシェル変数の1つです。
2つ目の注意点は、$nullを比較演算子の左側に置くことです。
違和感があると思いますが、
PowerShellではNullを確認する場合、
$nullを左側に置くことがベストプラクティスとされています。
(
$null について知りたかったことのすべて - PowerShell | Microsoft Docs)
PowerShellで使用できるメソッドの1つにIsNullOrEmptyメソッドがあります。 .NET Framework Stringクラスのメソッドです。 指定された変数がNullか空文字("")の場合にTrue、その他はFalseを返します。 Nullと空文字を同時に判定したい時はこのメソッドがおすすめです。
次のコードはIsNullOrEmptyメソッドを使って変数$aが「Nullまたは空文字」かどうかを 判定しています。
if ([string]::IsNullOrEmpty($a)) { Write-Host "Null or Empty" } else { Write-Host "other" }
(まとめ記事: PowerShell if文)