Подтвердить что ты не робот

Как изменить родительскую переменную области с помощью Powershell

Я новичок в 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

Но они даже не "скомпилируются". Что мне не хватает?

4b9b3361

Ответ 1

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

$script: val = 10

Ответ 2

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

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

Более подробную информацию о областях можно найти здесь: http://technet.microsoft.com/en-us/library/hh847849.aspx

Ответ 3

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

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

Ответ 4

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

$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