点源变量 VS 全局变量
Dot Sourced Variables VS Global Variables
我有两种方法可以从单独的脚本文件中引用脚本变量。以下是两个基本示例:
1.点源
变量.ps1
$Source = "source"
$Destination = "dest"
执行。ps1
. .\Variables.ps1
Copy-Item -Path $Source -Destination $Destination -Force
2。全局变量
变量.ps1
$Global:Source = "source"
$Global:Destination = "dest"
执行。ps1
.\Variables.ps1
Copy-Item -Path $Source -Destination $Destination -Force
我已经做过研究,但还没有找到一个明确的理由来使用一个而不是另一个。使用这些方法时是否有限制或注意事项?非常感谢任何输入。谢谢你的时间。
编辑:
@mklement0 给出了一个很好的答案,说明为什么要对全局变量使用点源。我很乐意继续讨论这个问题。如果有另一种观点,或者关于何时使用全局变量更有益的解释,我会很乐意听到它并相应地投票。谢谢。
我建议你使用点源,不使用显式全局变量(方法 1):
这样,需要刻意努力将变量添加到当前范围。请注意,点源将变量添加到 current 范围,它可能是也可能不是当前会话的 global 范围(子范围由例如,使用 &
调用脚本(没有点源)和脚本块。
相比之下,使用全局变量(方法 2)创建会话全局变量而不考虑调用方法,因此即使是意外的、非点源的脚本调用也会结束向上改变 global 状态。
我有两种方法可以从单独的脚本文件中引用脚本变量。以下是两个基本示例:
1.点源
变量.ps1
$Source = "source"
$Destination = "dest"
执行。ps1
. .\Variables.ps1
Copy-Item -Path $Source -Destination $Destination -Force
2。全局变量
变量.ps1
$Global:Source = "source"
$Global:Destination = "dest"
执行。ps1
.\Variables.ps1
Copy-Item -Path $Source -Destination $Destination -Force
我已经做过研究,但还没有找到一个明确的理由来使用一个而不是另一个。使用这些方法时是否有限制或注意事项?非常感谢任何输入。谢谢你的时间。
编辑:
@mklement0 给出了一个很好的答案,说明为什么要对全局变量使用点源。我很乐意继续讨论这个问题。如果有另一种观点,或者关于何时使用全局变量更有益的解释,我会很乐意听到它并相应地投票。谢谢。
我建议你使用点源,不使用显式全局变量(方法 1):
这样,需要刻意努力将变量添加到当前范围。请注意,点源将变量添加到 current 范围,它可能是也可能不是当前会话的 global 范围(子范围由例如,使用 &
调用脚本(没有点源)和脚本块。
相比之下,使用全局变量(方法 2)创建会话全局变量而不考虑调用方法,因此即使是意外的、非点源的脚本调用也会结束向上改变 global 状态。