#变量与作用域
#简介
变量用于在 PowerShell 会话中保存数据。与许多语言不同,PowerShell 的变量不需要预先声明类型,直接赋值即可创建。变量名以 $ 开头,并且大小写不敏感。
#变量赋值
使用等号 = 赋值:
> $name = "PowerShell"
> $version = 7
> $items = @("a", "b", "c")
读取变量时同样以 $ 开头:
> $name
PowerShell
> $version
7
由于变量名不区分大小写,$Name、$NAME 和 $name 指向同一个变量。
#自动变量
PowerShell 内置了一些由系统自动维护的变量:
| 变量 | 说明 |
|---|---|
$_ | 当前管道对象,是 $PSItem 的简写 |
$? | 上一条命令是否成功,值为 True 或 False |
$LASTEXITCODE | 上一个外部程序或脚本的退出码 |
$PSVersionTable | 当前 PowerShell 版本及运行环境信息 |
$PWD | 当前工作目录 |
$HOME | 当前用户的主目录 |
$Error | 最近发生的错误集合 |
> $PSVersionTable.PSVersion
> Get-ChildItem
> $?
True
#作用域
作用域决定变量在哪些位置可见。PowerShell 支持以下作用域:
| 作用域 | 说明 |
|---|---|
Global | 整个会话可见,通常是启动时的作用域 |
Script | 当前脚本文件内可见 |
Local | 当前作用域(函数或脚本块)内可见,也是默认作用域 |
Private | 仅在当前作用域可见,不向子作用域传递 |
在函数内给变量赋值时,默认创建的是 Local 变量:
> $x = "outer"
> function Test-Scope {
>> $x = "inner"
>> $x
>> }
> Test-Scope
inner
> $x
outer
使用 $script:、$global: 等前缀可以显式访问其他作用域:
$script:counter = 0
$global:appName = "Demo"
#变量管理命令
除了直接赋值,还可以使用 cmdlet 管理变量:
> New-Variable -Name "color" -Value "blue"
> Set-Variable -Name "color" -Value "red"
> Get-Variable -Name "color"
> Remove-Variable -Name "color"
New-Variable创建变量。Set-Variable设置已有变量的值,不存在时也可以创建。Remove-Variable删除变量。
New-Variable 还可以通过 -Option 设置只读等属性:
> New-Variable -Name "pi" -Value 3.14 -Option ReadOnly
#环境变量
环境变量通过 $env: 前缀访问,它们由操作系统维护:
> $env:PATH
> $env:HOME
设置环境变量只影响当前进程及其子进程:
> $env:MY_VAR = "hello"
> $env:MY_VAR
hello