変数に関するこの構文を以前に見たことがありますが、それが正確に何であるかはよくわかりません。
$script:Foo = "Bar"
ベストアンサー1
構文は、$script:Foo
スクリプト レベルの変数 (この場合は ) を変更する場合に最もよく使用されます$Foo
。変数を読み取る場合、通常は で$Foo
十分です。たとえば、次のように記述するのではなく、
verbose-script.ps1
$script:foo = ''
function f { $script:foo }
私は次のように書きます (冗長性は少なく、機能的に同等です):
script.ps1
$foo = ''
function f { $foo }
重要なの$script:Foo
は、関数や匿名スクリプト ブロックなどの別のスコープ内からスクリプト レベルの変数を変更する場合です。例:
PS> $f = 'hi'
PS> & { $f; $f = 'bye';$f }
hi
bye
PS> $f
hi
$f
スクリプトブロック内でを変更したにもかかわらず、スクリプトブロックの外部は変更されていないことに注意してくださいbye
。 のローカル コピーのみが変更されたためです。 (または)$f
などの修飾子を適用しない場合、PowerShell は、よりスコープの高い変数に対して を実行して、同じ名前のローカル変数に変換します。script:
global:
copy-on-write
上記の例で、 に永続的な変更を加えたい場合には、またはの$f
ような修飾子を使用します。例:script:
global:
PS> $f = 'hi'
PS> & { $f; $global:f = 'bye';$f }
hi
bye
PS> $f
bye