PowerShell 中的空變數
PowerShell 處理值為 null 的 $Null
物件,並且某些命令需要一些輸出才能生成。如果有任何錯誤,它們會生成 null 值,並且還有助於指令碼中的故障排除目的,以檢查命令是否生成任何值。
本文討論了 null 變數、在 PowerShell 中以不同語法使用 null 變數的影響以及檢查 null 值的方法。
PowerShell 中的 Null 變數簡介
我們可以將 NULL 視為未知或空值。例如,在你分配值或物件之前,變數為 NULL。
此變數可能很重要,因為某些命令需要一個值,如果該值為 NULL,則會生成錯誤。
$null
變數是 PowerShell 中用於表示 NULL 的自動變數。我們可以將它分配給變數,在比較中使用它,並將它用作集合中 NULL 的佔位符。
PowerShell 將 $null
視為具有 NULL 值的物件。因此,此變數與你來自其他語言時所期望的不同。
PowerShell 中 Null 變數的影響
$null
值會根據它們出現的位置不同地影響你的程式碼。
對字串的影響
如果你在字串中使用 $null
,它將是一個空值(或空字串)。
$value = $null
Write-Output "The value is $value."
輸出:
The value is .
這個變數是我們在日誌訊息中使用變數時必須在變數周圍放置括號的原因之一。當值位於字串末尾時,識別變數值的邊緣更為關鍵。
$value = $null
Write-Output "The value is [$value]"
輸出:
The value is []
這個變數使空字串和 $null
值很容易被發現。
對數值方程的影響
當在數值方程中使用 $null
變數時,如果沒有給出錯誤,我們的結果將無效。有時 $null
變數的計算結果為 0
,而其他時候它會使整個結果為 $null
。
這是一個涉及乘法的示例,根據值的順序給出 0
或 $null
。
$null * 5
$null -eq ( $null * 5 )
輸出:
True
對集合的影響
集合允許我們使用索引來訪問值。如果我們嘗試索引一個空集合,我們會得到這個錯誤:Cannot index into a null array
。
$value = $null
$value[10]
輸出:
Cannot index into a null array.
At line:2 char:1
+ $value[10]
+ ~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
我們有一個集合,但嘗試訪問一個不在集合中的元素,然後你會得到一個 $null
結果。
$array = @( 'one', 'two', 'three' )
$null -eq $array[100]
輸出:
True
對物件的影響
如果我們試圖訪問一個沒有指定屬性的物件的屬性或子屬性,我們可以得到一個 $null
變數,就像你對一個未定義的變數一樣。在這種情況下,值是 $null
還是實際物件都沒有關係。
$null -eq $undefined.not.existing
輸出:
True
對方法的影響
在 $null
變數上呼叫方法將引發 RuntimeException
異常。
$value = $null
$value.toString()
輸出:
You cannot call a method on a null valued expression.
At line:2 char:1
+ $value.toString()
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
每當我們看到短語 You cannot call a method on a null valued expression
時,我們可以在不首先檢查 $null
值的情況下尋找在變數上呼叫方法的位置。
在 PowerShell 中檢查空值
在示例中檢查 $null
值時,我們總是將 $null
變數放在左側。
這種寫作風格是有意為之,並被視為 PowerShell 最佳實踐。但是,在某些情況下,將其放在右側不會給你預期的結果。
讓我們看看下面的例子,並嘗試預測結果會是什麼:
if ( $value -eq $null ){
'The array is $null'
}
if ( $value -ne $null ){
'The array is not $null'
}
如果我們沒有定義 $value
,第一個將評估 $true
,我們的訊息將是 The array is $null
。這裡需要注意的是,建立一個允許兩個結果都為 $false
的 $value
是可能的。
輸出:
$value = @( $null )
在這種情況下,$value
變數是一個包含 $null
的陣列。
-eq
運算子將檢查陣列中的每個值並返回匹配的 $null
(計算結果為 $false
)。 -ne
運算子將返回與 $null
值不匹配的所有內容,在這種情況下,沒有結果(這也將評估為 $false
)。
因此,即使其中一個應該是,也不會是 $true
。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn