变量可以自动存储任何Powershell能够识别的类型信息,可以通过$variable的GetType().Name查看和验证Powershell分配给变量的数据类型。
PS> (10).gettype().name Int32 PS> (9999999999999999).gettype().name Int64 PS> (3.14).gettype().name Double PS> (3.14d).gettype().name Decimal PS> ("WWW.MOSSFLY.COM").gettype().name String PS> (Get-Date).gettype().name DateTimePowershell
会给数据分配一个最佳的数据类型;如果一个整数超出了32位整数的上限([int32]::MaxValue),它就会分配一个64位整数的数据类型;如果碰到小数,会分配一个Double类型;如果是文本,Powershell会分配一个String类型;如果是日期或者时间,会被存储为一个Datetime对象。
这种类型自适应也称作“弱类型”,虽然使用起来方便,但是也会有一些限制,甚至危险。如果powershell选择了一个错误的类型付给变量,可能会引发一些奇怪的现象。例如有一个变量要存储的是即将拷贝文件的个数,可是在赋值时付了一个字符串,Powershell不会去做过多的判断,它会更新这个变量的类型,并且存储新的数据。所以一般专业的程序员或者脚本开发者更喜欢使用“强类型”,哪怕在赋值时类型不兼容的报错,他们也乐意接受。
喜欢使用强类型的另一个原因是:每一个数据类型都有属于自己的函数。例如DateTime,和XML,尽管这两种类型都可以用纯文本表示,但是使用强类型[DateTime]和[XML],对于数据操作起来更方便,这两个类型的方法可是很丰富奥!
指定类型定义变量
定义变量时可以在变量前的中括号中加入数据类型。例如定义一个Byte类型的变量,因为Byte的定义域为[0,255],一旦尝试使用一个不在定义域中的值赋给该变量就会显示一条错误信息。
PS> [byte]$b=101 PS> $b 101 PS> $b=255 PS> $b 255 PS> $b.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Byte System.ValueType PS> $b=256 Cannot convert value "256" to type "System.Byte". Error: "Value was either too large or too small for an unsigned byte. " At line:1 char:3 + $b <<<< =256 + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException
使用固定类型的优点
手动地定义类型的一个重要原因是每个特殊的数据类型都有自己的特殊命令和特殊方法。比如把一个日期字符串赋给一个变量,Powershell不会自动把这个字符串转换成日期对象赋给一个变量,因为Powershell毕竟是机器,没有人那么智能。当你在赋值时指定DateTime类型时,你会发现几乎所有的.Net 中DateTime类型的方法在这里都得到支持。
PS> [DateTime]$date="2012-12-20 12:45:00" PS> $date 2012年12月20日 12:45:00 PS> $date.DayOfWeek Thursday PS> $date.DayOfYear 355 PS> $date.AddDays(-10) 2012年12月10日 12:45:00Powershell
处理Xml文档也很方便,
例如有如下LogoTest.xml
<LOGOTEST> <EXTENSIONS> <E>.exe</E> <E>.dll</E> </EXTENSIONS> <FILES> <F></F> </FILES> <DIRS></DIRS> </LOGOTEST>
查询.exe 和 .dll结点
PS> [ XML ]$xml=(Get-Content .LogoTestConfig.xml) PS> $xml.LogoTest.Extensions.E .exe .dllPowershell
默认支持的.NET类型如下。
[array],[bool],[byte],[char],[datetime],[decimal],[double],[guid],[hashtable],[int16],[int32],[int],[int64],[long],[nullable],[psobject],[regex],[sbyte].[scriptblock],[single],[float],[string],[switch],[timespan],[type],[uint16],[uint32],[uint64],[ XML ]
强制类型转换:将一个数据类型强制转换为其他的数据类型。 类型转换主要指,将其他的数据类型,转换为:String、Number、Boolean。你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。 其他的简单类型 --> String 方法一:变量 + "" 或者 变量 + "abc" 举例如下: var a = 123; // Number 类型 co
怎么确定一个变量是什么类型的呢?大家可以用 type() 函数来检查。Lua 支持的类型有以下几种: Nil 空值 所有没有使用过的变量,都是 nil。nil 既是值,又是类型。 Boolean 布尔值 true 或 false Number 数值 在 Lua 里,数值相当于 C 语言的 double String 字符串 如果你愿意的话,字符串是可以包含 '\0' 字符的 Table 关系表类型
变量只不过是我们的程序可以操作的存储区域的名称。 Pascal中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局; 可存储在该内存中的值范围; 以及可以应用于变量的操作集。 变量的名称可以由字母,数字和下划线字符组成。 它必须以字母或下划线开头。 Pascal not case-sensitive ,因此大写和小写字母在这里意味着相同。 根据前一章中解释的基本类型,将有以下基本变量类型
变量只是用于存储值的保留内存位置。 这意味着当您创建变量时,您在内存中保留了一些空间。 根据变量的数据类型,解释器分配内存并决定可以存储在保留内存中的内容。 因此,通过为变量分配不同的数据类型,可以在这些变量中存储整数,小数或字符。 将值分配给变量 Python变量不需要显式声明来保留内存空间。 为变量赋值时,声明会自动发生。 等号(=)用于为变量赋值。 =运算符左边的操作数是变量的名称,=运算符
变量为我们提供了程序可以操作的命名存储。 Java中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局; 可存储在该内存中的值范围; 以及可以应用于变量的操作集。 必须先声明所有变量才能使用它们。 以下是变量声明的基本形式 - data type variable [ = value][, variable [ = value] ...] ; 这里data type是Java的数据类型之