Как изменить родительскую переменную области видимости, используя Powershell - PullRequest
19 голосов
/ 20 июля 2011

Я довольно новичок в powershell, и я просто не понимаю, как изменить переменную в родительской области:

$val = 0
function foo()
{
    $val = 10
}
foo
write "The number is: $val"

Когда я запускаю его, я получаю:

The number is: 0

Мне бы хотелось, чтобы это было 10. Но powershell создает новую переменную, которая скрывает переменную в родительской области.

Я пробовал это, но безуспешно (согласно документации):

$script:$val = 10
$global:$val = 10
$script:$val = 10

Но они даже не «компилируются», так сказать. Чего мне не хватает?

Ответы [ 4 ]

25 голосов
/ 20 июля 2011

Вам не нужно использовать глобальную область видимости. Возможно, переменная с таким именем уже существовала в консоли оболочки, и вы можете обновить ее. Используйте модификатор области действия скрипта. При использовании модификатора области вы не включаете знак $ в имя переменной.

$ скрипт: val = 10

15 голосов
/ 04 февраля 2013

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

$val = 0
function foo {
    Set-Variable -scope 1 -Name "Val" -Value "10"
}
foo
write "The number is: $val"

Дополнительную информацию можно найти в статье Microsoft Docs Об областях применения .

6 голосов
/ 21 июля 2011

Позвольте мне указать на третий вариант, хотя ответ уже был сделан. Если вы хотите изменить переменную, не бойтесь передавать ее по ссылке и работать с ней таким образом.

$val=1
function bar ($lcl) 
{
    write "In bar(), `$lcl.Value starts as $($lcl.Value)"
    $lcl.Value += 9
    write "In bar(), `$lcl.Value ends as $($lcl.Value)"
}
$val
bar([REF]$val)
$val

Возвращает:

1
In bar(), $lcl.Value starts as 1
In bar(), $lcl.Value ends as 10
10
5 голосов
/ 20 июля 2011

Если вы хотите использовать это, вы можете сделать что-то вроде этого:

$global:val=0 
function foo()
{
    $global:val=10 
}
foo
write "The number is: $val"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...