點源代碼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