Variable scoping in PowerShell

后端 未结 4 1700
日久生厌
日久生厌 2020-12-02 18:21

A sad thing about PowerShell is that function and scriptblocks are dynamically scoped.

But there is another thing that surprised me is that variables behave as a cop

4条回答
  •  渐次进展
    2020-12-02 18:30

    The PowerShell scopes article (about_Scopes) is nice, but too verbose, so this is quotation from my article:

    In general, PowerShell scopes are like .NET scopes. They are:

    • Global is public
    • Script is internal
    • Private is private
    • Local is current stack level
    • Numbered scopes are from 0..N where each step is up to stack level (and 0 is Local)

    Here is simple example, which describes usage and effects of scopes:

    $test = 'Global Scope'
    Function Foo {
        $test = 'Function Scope'
        Write-Host $Global:test                                  # Global Scope
        Write-Host $Local:test                                   # Function Scope
        Write-Host $test                                         # Function Scope
        Write-Host (Get-Variable -Name test -ValueOnly -Scope 0) # Function Scope
        Write-Host (Get-Variable -Name test -ValueOnly -Scope 1) # Global Scope
    }
    Foo
    

    As you can see, you can use $Global:test like syntax only with named scopes, $0:test will be always $null.

提交回复
热议问题