我试图了解变量如何保留值和范围。为此我创建了两个简单的脚本。了解PowerShell变量范围
低级别的脚本看起来像这样
param(
$anumber=0
)
function PrintNumber
{
Write-Host "Number is $anumber"
$anumber++
Write-Host "Number is now $anumber"
}
顶层脚本看起来像这样
$scriptPath=(Split-Path -parent $PSCommandPath)+"\" + "calledscript.ps1"
#dot source the called script
. $scriptPath 22
for($i=0;$i -lt 10;$i++)
{
PrintNumber
}
主脚本“点源”被调用的脚本一次,在一开始并传递一个值,“22”。然后我从顶层脚本中调用PrintNumber函数10次。我想输出会是什么样子:
号是22 人数现已23
号是23 号是现在24
号是现在24 号是25
而是调用该函数时该数字始终为22,(如下所示)。为什么这个数字每次重新设置为22,即使我只拉了点源脚本一次,并将数字初始化为22?
号是22 人数现已23
号是22 号是现在23
号是22 号是现在23
感谢
(请忽略任何错别字)
如果将其定义更改为'$ global:anumber',会发生什么情况? – arco444 2015-03-02 12:02:29
我将参考(不是声明)从$ anumber ++更改为$ global:an ++ ++,然后按我的预期递增。不完全确定为什么真的! – Keith 2015-03-02 13:52:13
绝对是一个范围界定问题。我不深入了解很多,但在PowerShell中有'local','script'和'global'变量。有意义的是,由于您从其他脚本获取变量,所以默认范围是'script',并且递增的值不会持续。 – arco444 2015-03-02 14:11:14