Как изменить родительскую переменную области с помощью 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
Но они даже не "скомпилируются".
Что мне не хватает?
Ответы
Ответ 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