#数据类型
#简介
PowerShell 建立在 .NET 之上,变量中保存的值都是 .NET 对象。常见的字符串、整数、浮点数、布尔值和日期时间都有对应的 .NET 类型。PowerShell 会根据赋值自动推断类型,也可以强制指定类型。
#常用类型
| 类型加速器 | .NET 类型 | 示例 |
|---|---|---|
[string] | System.String | "hello" |
[int] | System.Int32 | 42 |
[double] | System.Double | 3.14 |
[bool] | System.Boolean | $true |
[datetime] | System.DateTime | Get-Date |
使用 [类型] 语法可以声明变量或参数的类型:
[string]$name = "PowerShell"
[int]$count = 10
[double]$ratio = 0.75
[bool]$enabled = $true
[datetime]$today = Get-Date
#类型加速器
类型加速器是 .NET 类型的简写。除了上表中的类型,常用的还有:
[array] # System.Array
[hashtable] # System.Collections.Hashtable
[pscustomobject] # System.Management.Automation.PSCustomObject
[xml] # System.Xml.XmlDocument
查看某个类型加速器对应的完整类型:
> [int]
System.Int32
#类型转换
PowerShell 会尝试在需要时自动转换类型:
> $a = "10"
> $a + 5
105
上面把 "10" 当成了字符串进行拼接。如果要按数值计算,需要显式转换:
> [int]$a + 5
15
也可以使用 -as 运算符进行转换,转换失败时返回 $null:
> "abc" -as [int]
> "42" -as [int]
42
#布尔值与 null
PowerShell 使用 $true 和 $false 表示布尔值:
> $true
True
> $false
False
$null 表示空值,通常用于判断变量是否为空:
> $value = $null
> $value -eq $null
True
> if ($null -eq $value) { "empty" }
empty
- 在比较中建议把
$null放在左侧,避免与数组比较时出现意外结果。 - 空字符串
""、数字0和空数组在布尔上下文中都会被视作$false。
#GetType()
所有对象都可以调用 GetType() 查看其实际类型:
> $name = "PowerShell"
> $name.GetType().FullName
System.String
> (42).GetType().Name
Int32
对于通过管道得到的对象,也可以结合 Get-Member 查看类型和成员,详见 Get-Member 帮助手册。