Что делает скрипт: делает в powershell? - PullRequest
13 голосов
/ 02 декабря 2010

Я уже видел этот синтаксис для переменной раньше и не совсем уверен, что именно:

$script:Foo = "Bar"

Ответы [ 2 ]

12 голосов
/ 03 декабря 2010

Синтаксис $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. Если вы не примените такой модификатор, как script: (или global:), PowerShell выполнит copy-on-write для переменной с более высокой областью действия в локальной переменной с тем же именем.

Учитывая приведенный выше пример, если бы мы действительно хотели сделать постоянное изменение на $f, мы бы тогда использовали модификатор, такой как script: или global:, например:

PS> $f = 'hi'
PS> & { $f; $global:f = 'bye';$f }
hi
bye
PS> $f
bye
5 голосов
/ 02 декабря 2010

Префикс script: вызывает поиск имени справа в области видимости скрипта.По сути данные, которые являются локальными для самого сценария.Другие допустимые области включают глобальные, локальные и частные.

Раздел справки по области действия содержит немного подробностей по этому вопросу.

help about_Scopes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...