点源代码powershell脚本时,我遇到了一些范围问题。 假设我有一个剧本 'A.ps1':点源代码脚本时PowerShell范围冲突
$VERSION = "1.0"
# Dot source B.ps1
. .\B.ps1
function Write-Version { Write-Host "A.ps1 version $VERSION" }
Write-Version
而且脚本B.ps1
$VERSION = "2.0"
function Write-Version { Write-Host "B.ps1 version $VERSION" }
Write-Version
运行的输出A.ps1将是:
B.ps1 version 2.0
A.ps1 version 2.0
为什么这种情况非常明显。来自B.ps1的$VERSION
变量被放入A.ps1的范围并覆盖该变量。事实上,这也发生在Write-Version
以及A.ps1覆盖B的版本,但是因为Write-Version
在B.ps1中被调用,所以我们仍然可以看到B的Write-Version函数的输出。
这个问题当然是如何防止这个?我已经尝试了各种范围选项,但点击采购时似乎不起作用。而且由于B.ps1中有函数需要在A的作用域中,所以只需调用B.ps1可能不是一个选项。
有没有人有任何想法?
有趣的问题。如果是我,我不会在两个脚本中重复使用相同的变量名称(如果它们在同一个会话中使用)。 – JNK 2011-12-15 13:54:05
有关您的问题的一切都是有效的,所以都是答案(您应该使用模块) - **除为你的前提**。您声明B输出2.0和A输出1.0。 (如果事实如此,你甚至不需要发布这个问题!)实际上,A输出2.0,这是你的观点。 (是的,我知道这只是一个错字,但是一个角色会有什么不同:-) – 2011-12-15 17:38:56
@msorens是的,谢谢你的发现。你的推理绝对正确。我将修改帖子。 – wensveen 2011-12-16 08:45:21