PowerShell中的基础数据类型
PowerShell是一个面向对象的语言,在申明变量的时候不强制要求申明数据类型,使用$开头来申明变量即可。
基本数据类型
PowerShell本身是基于.Net开发出来的,所以在.Net中的基本数据类型,在PowerShell中也可以使用,只是在PowerShell中用”[]”来标识具体的数据类型。比如[int],[long],[string],[bool],[double]等。
使用-is来判断某个变量是否指定的数据类型,和C#中的is关键字是一样的。比如:
$a=10;
$a -is [int]
$a -is [double]
第二行返回True,第三行返回False。
我们也可以在定义变量时指定数据类型。比如我们要定义decimal类型的10,那么可以写为:
[decimal]$c=10
$c.GetType() 可以看到我们的类型为Decimal。
数据类型转换
关于默认数据类型转换,PowerShell和C#的行为有所不同。PowerShell会根据第一个变量的类型作为目标类型,然后将运算后面的联系转换为第一个类型。比如我们申明两个变量:
$a=10;
$b="";
如果我们使用加法运算:
$a+$b
该运算会返回20,因为第一个变量是int类型的,所以后面的变量都会转换为int类型。如果我们调整变量的顺序:
$b+$a
该运算返回的结果为1010,因为第一个变量是string类型。习惯了C#的默认类型转换,那么我们可以强制进行类型转换后再进行运算。强制类型转换的方法也是与C#相同。
比如我们要按int类型来计算,那么我们第二个加法可以改为:
[int]$b+$a
我们也可以使用-as命令,那么第二个加法改为:
($b -as [int])+$a
List/Array类型
我们平时使用的各种Get-XXX命令,很多都是返回对应类型的Array,比如Get-Process.
如果我们要定义一个集合,那么可以使用”@(对象1,对象2,对象3…)”的格式申明集合。比如我们定义一个字符串集合:
$a=@('a','bb','ccc')
其实不使用@和括号也是可以的,只需要用逗号分割各个Item即可。
$a='aaa','bb','c'
如果是申明一个空的集合,就必须写为:
$a=@()
与C#不同的是,在PowerShell中,往集合中添加元素,可以使用+=符号。
$a=@()
$a+="abc"
$a+="dddd"
Write-Host $a
如果要移除某个元素,那么就不简单了,需要使用Where查询(简写为?),找出要保留的元素,然后将保留的元素集合再重新赋值会变量。比如对于字符串集合,我们要移除字符c,那么操作如下:
$a=@('aaa','bb','c')
$a= $a | ? {$_ -ne 'c'}
Write-Host $a
访问某个元素使用[idx]即可和C#相同。至于对集合的各种操作,可以参见我上一篇博文。
Hashtable/Dictionary类型
哈希表就是一个Key-Value对的集合。哈希表的创建格式如下:
@{Key1=Value1;Key2=Value2;…}
这里Key一般是字符串,但是并不需要用引号引起来(当然,使用了引号更好),Value可以是任意类型。比如我们创建一个员工和部门的Hashtable,命令如下:
$a=@{Devin="IT";Edward="Finance";Jeneen="Sale"}
使用keys属性可以获得哈希表的Key列表,使用values属性可以获得Value列表。
如果要往哈希表中添加元素,可以使用.Add(Key,Value)方法。比如添加一个员工:
$a.Add("Julia","Logisitcs")
这里需要注意的是Key必须要带引号。而且哈希表的Key是不允许重复的,如果已经存在相同的值,添加会报错。可以先判断Key是否存在,然后再添加:
if(-not $a.ContainsKey("Julia"))
{
$a.Add("Julia","Logisitcs")
}
如果要移除某个Key对应的元素,那么可以调用.Remove(Key)函数即可。
$a.Remove("Julia")
如果要访问某个Key对应的值,有两种方法:
$a["Devin"]
$a.Devin
需要注意的是,直接对哈希表进行Sort-Object是没有效的,我们必须先调用GetEnumerator方法,把哈希表转换后在执行Sort。
$a.GetEnumerator() | Sort-Object Name
PowerShell中的基础数据类型的更多相关文章
- [.net 面向对象编程基础] (3) 基础中的基础——数据类型
[.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...
- Python中的基础数据类型
Python中基础数据类型 1.数字 整型a=12或者a=int(2),本质上各种数据类型都可看成是类,声明一个变量时候则是在实例化一个类. 整型具备的功能: class int(object): & ...
- Delphi中的基础数据类型
参考http://www.cnblogs.com/del/archive/2007/12/04/982167.html 在学习之初,在这么多的数据类型中,最好记住这五种标准数据类型(整型.实型.字符型 ...
- C#中的基础数据类型
一.C#有15个预定义类型,13个值类型,两个引用类型(string和object): 1.整型 int a=15; short a=15; 2.浮点类型 float a=12.9; double a ...
- 二、Windows基础数据类型
六.Windows Data Types 简介: 6.1.这些数据类型都是C语言数据类型的再次的进行包装. 6.2.因为考虑到如果使用的是C中的基础数据类型可能无法表示,想表示的精准的含义. 6.3. ...
- Python基础数据类型之列表和元组
一.列表 list 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li ...
- python基础二(基础数据类型)
一. 引子 1. 什么是数据 x=10,10是我们要存储的数据 2. 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3.数据类型 数字 字符串 列表 元组 字 ...
- python基础数据类型--list列表
列表: 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = [‘alex ...
- python 的基础 学习 第五天 基础数据类型的操作方法
1,列表的基本操作方法 1,列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: ...
随机推荐
- js面试题之数组去重对比
最近看一些面试题,很多都提到了数组去重,用的最多的不外乎就是下面这个例子 arr.filter(function(value,index,arr){ return arr.indexOf(value, ...
- mongodb-基础-update-remove
1.一些操作 collection重命名: > db.post.renameCollection('foo') { "ok" : 1 } > show collecti ...
- Ionic2学习笔记(5):Provider
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5547646.html Provider是一种为App提供数据源的方式, 举个 ...
- 5.Inheritance Strategy(继承策略)【EFcode-first系列】
我们已经在code-first 约定一文中,已经知道了Code-First为每一个具体的类,创建数据表. 但是你可以自己利用继承设计领域类,面向对象的技术包含“has a”和“is a”的关系即,有什 ...
- Asp.net 面向接口可扩展框架之类型转化基础服务
新框架正在逐步完善,可喜可贺的是基础服务部分初具模样了,给大家分享一下 由于基础服务涉及面太广,也没开发完,这篇只介绍其中的类型转化部分,命名为类型转化基础服务,其实就是基础服务模块的类型转化子模块 ...
- eclipse报错:Failed to load the JNI shared library
Eclipse运行时提示“Failed to load the JNI shared library /Java/jre6/bin/client/jvm.dll”的一个解决方案 因为 Eclipse ...
- ATM跨行取款的清算方式
ATM跨行取款和POS机是类似的,因为没有商户参与,所以不需要收单清算,过程更为简单. 回到文章最开头的例子:你拿着一张工行卡去建行的ATM取了100元,这个跨行业务在CNAPS体系中的过程如下: 你 ...
- Atitit.异常处理 嵌套 冗长的解决方案
Atitit.异常处理 嵌套 冗长的解决方案 1. 异常处理的需要改进的地方1 2. +异常设计的初衷是, 在程序中出现错误时, 由程序自己处理错误, 尽量不要以exit(0)这种粗暴的方式中止程序 ...
- canvas 画圈 demo
html代码: <canvas id="clickCanvas2" width="180" height="180" data-to ...
- Mvc视图的那些事
最近参与项目底层重写,在代码组织方式,类型使用上已经与之前有了很大的不同,这里总结一下视图的使用. 一.视图中命名空间的使用 视图命名空间的使用方式大致有三种:一,完全限定名,如 @System.Da ...