Dot Sourced Variables VS Global Variables

牧云@^-^@ 提交于 2019-12-24 04:24:10

问题


I have two ways of referencing script variables from a separate script file. Here are two basic examples:

1. Dot Source
Variables.ps1

$Source = "source"  
$Destination = "dest"

Execute.ps1

. .\Variables.ps1  
Copy-Item -Path $Source -Destination $Destination -Force

2. Global Variable
Variables.ps1

$Global:Source = "source"  
$Global:Destination = "dest"

Execute.ps1

.\Variables.ps1  
Copy-Item -Path $Source -Destination $Destination -Force

I have done research but have yet to find a definitive reason as to use one over the other. Are there limitations or cautions I should exercise when using these methods? Any input is greatly appreciated. Thank you for your time.

EDIT:

@mklement0 gave a great answer as to why to use dot-sourcing over global variables. I would love to still keep this discussion open. If there is another point of view, or an explanation as to when using global variables is more beneficial, I would enjoy hearing it and up-voting accordingly. Thank you.


回答1:


I suggest you use dot-sourcing, without explicit global variables (method 1):

That way, it requires a deliberate effort to add variables to the current scope. Note that dot-sourcing adds the variables to the current scope, which may or may not be the current session's global scope (child scopes are created by calling scripts (without dot-sourcing) and script blocks with &, for instance).

By contrast, using global variables (method 2) creates session-global variables irrespective of invocation method, so that even accidental, non-dot-sourced invocations of the script end up altering the global state.



来源:https://stackoverflow.com/questions/42380181/dot-sourced-variables-vs-global-variables

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!