Windows Powershell 变量的类型和强类型
变量可以自动存储任何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 ]
推荐阅读
-
Python把csv数据写入list和字典类型的变量脚本方法
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
Java基础学习-基本数据类型变量的定义和使用
-
PowerShell中的强类型数组介绍
-
详细解析Python当中的数据类型和变量
-
Python入门必学:数据类型和变量的用法
-
编写一个表示二维平面上的点的类MyPoint,满足以下条件: 1、定义private的成员变量x和y,表示点的x和y坐标,类型为double
-
C语言入门(十四)变量的作用域和存储类型
-
变量和简单的数据类型
-
荐 javascript从入门到跑路-----小文的js学习笔记(17)------动态属性、复制变量值、传递参数和检测类型