PowerShell 7 中引入了哪些新的空運算子?
PowerShell 7 版本引入了一些新的空運算子。它們如下所示。
空合併運算子 - ??
空條件賦值運算子 - ??=
空條件成員訪問運算子 - ?. 和 ?[]
a. 空合併運算子 - ??
空合併運算子 ?? 會評估左側條件或運算元,如果它是空值,則評估右側運算元;否則,提供左側運算元的值。
例如,如果沒有空合併運算子,我們將編寫如下所示的指令碼:
$Name = $null
if($Name -eq $null){"Name is Null"}
Else {"PowerShell"}上面的相同條件可以用 ?? 運算子編寫。
$name = $null $name ?? "PowerShell"
輸出:
PowerShell
因此,變數輸出的左側為空,因此評估右側的值或表示式。
假設左側運算元不為空,則將顯示其值。
$name = "Hello" $name ?? "PowerShell" Hello
您還可以新增表示式:
$service = Get-Service abc -ErrorAction Ignore $service ?? (Get-Service Spooler)
輸出:
Status Name DisplayName ------ ---- ----------- Running Spooler Print Spooler
b. 空條件賦值運算子 - ??=
PowerShell 中的空條件賦值運算子 ??= 僅當左側運算元的值為空時,才將右側運算元的值賦給左側運算元。如果左側運算元為空,則此運算子不會評估右側運算元。例如:
$serivce = $null $service ??= (Get-Service Winrm)
輸出:
$service Status Name DisplayName ------ ---- ----------- Running Winrm Windows Remote Management (WS-Managem…
上面的命令類似於:
$service = $null
if($service -eq $null){$service = Get-Service Winrm}
$service
Status Name DisplayName
------ ---- -----------
Running Winrm Windows Remote Management (WS-Managem…如果左側運算子不為空,則值不會更改。
$val = "PowerShell" $val ??= "Hello World"
輸出:
$val PowerShell
c. 空條件成員訪問運算子 - ?. 和 ?[]
顧名思義,這兩個運算子都用於訪問物件的成員。這兩個運算子都在 PS 7 版本中引入,並且仍在預覽模式中,用於實驗目的,因此並非每個人都能使用。
它類似於直接訪問變數或物件的任何屬性或成員,但是為什麼我們需要它們呢?因為首先它會評估物件,如果它是空值,則它不會訪問成員(屬性或方法)。
由於我們使用這兩個運算子來訪問物件的屬性或方法,因此我們需要將物件用 {} 括號括起來,然後才能使用運算子。例如:
$service = Get-Service WinRm
${Service}?.Status輸出:
Running
上面的示例也可以透過簡單地訪問屬性來實現,但區別在於,如果服務名稱不存在,則簡單的命令會丟擲錯誤,而如果服務名稱為空,則此運算子不會丟擲錯誤。例如:
$services = Get-Service ABC -ErrorAction ignore $service.start() You cannot call a method on a null-valued expression. At line:1 char:1 + $service.start() + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
新的運算子不會給出任何輸出,因為服務名稱不存在。
${Service}?.Start()
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP