web-dev-qa-db-ja.com

Clear-Variableと変数のNULL設定の違い

関数とそのスコープの問題を回避するために、スクリプトスコープで宣言されている変数をよく使用します。私はこれらの変数を次のように宣言しています:

New-Variable -Name test -Option AllScope -Value $null

...または、このような既存の変数を切り替えて、それらを包括的に使用することもあります。

$script:test = $test

それらをクリアしたいときは、次のいずれかを使用します。

Clear-Variable test -Scope Script

...または私は単にこれを使用します:

$test = $null

違いはありますか?私は何を好むべきですか、そしてなぜですか?

7
user5197928

Get-Helpから:

Clear-Variableコマンドレットは、変数に格納されているデータを削除しますが、変数は削除しません。その結果、変数の値はNULL(空)になります。変数に指定されたデータまたはオブジェクトタイプがある場合、Clear-Variableは変数に格納されているオブジェクトのタイプを保持します。

したがって、Clear-Variable$var=$nullはほぼ同等です(保持される入力を除く)。まったく同じことは、$var=[mytype]$nullを実行することです。

あなたはそれを自分でテストすることができます:

$p = "rrrr"
Test-Path variable:/p     # => $true
$p = $null
Get-Member -InputObject $p     # => error
$p = [string]$null
Get-Member -InputObject $p   # => it is a string

そして、次の質問に答えるために:変数を完全に削除する方法(存在しない変数はnull値の変数とは異なるため)?単にする

rm variable:/p
Test-Path variable:/p => $false
9
Marcanpilami