首页 > 系统相关 >(12)Powershell中变量的类型

(12)Powershell中变量的类型

时间:2024-01-20 10:35:14浏览次数:41  
标签:PS 12 Users 数据类型 Powershell tiand string 变量

(12)Powershell中变量的类型

Window Powershell中变量的类型与Java,C#等高级语言中变量的类型不一样,可以不用显示指定Powershell中变量的类型,即Powershell中的变量具有更大的灵活性。Powershell中的变量采用 .Net Framework类型。

默认情况下,当变量只有一个值时,变量的数据类型由赋予变量的值决定。例如,下面的语句创建一个整数 (System.Int32) 类型的变量:

PS C:\Users\tiand> $a=3

如果需要确定变量的 .NET Framework 类型,可以使用 GetType() 方法(该方法没有任何参数)的 FullName 属性,例如:

PS C:\Users\tiand> $a=3

PS C:\Users\tiand> $a.GetType().fullname
System.Int32

创建字符串变量与Java,C#高级语言一致,需要把值放在引号内。例如:

PS C:\Users\tiand> $a = "3"

PS C:\Users\tiand> $a.GetType().fullname
System.String

如果赋予变量的第一个值是字符串,则 PowerShell 将所有运算都视为字符串运算(字符串的连接),并将新值转换为字符串。例如以下语句执行的结果34是字符串(可以获取其类型来验证):

PS C:\Users\tiand> $a = "3"

PS C:\Users\tiand> $a += 4

PS C:\Users\tiand> $a
34

Powershell中也可以强制指定变量的类型。

在变量名称之前放置类型名称或第一个所赋值前面的方括号中,可以将新的标量变量转换为任何 .NET Framework 支持的类型。在转换变量时,可以确定该变量所能存储的数据的类型。同时,还可以确定只有符合类型的变量才可以赋值给指定的变量。还可以确定填充变量时的变量行为方式。

例如,以下命令将变量转换为字符串类型。

PS C:\Users\tiand> [string]$a=30

PS C:\Users\tiand> $a += 5

PS C:\Users\tiand> $a
305

下面的语句转换第一个值,而不是转换变量:

PS C:\Users\tiand> $a = [string]30

将变量转换为特定类型时,通常的约定是转换变量而不是值。但是,如果现有变量的值不能转换为新数据类型,则不能重新转换该变量的数据类型。要更改数据类型,必须替换该变量的值(相当于创建新的变量),例如:

PS C:\Users\tiand> $b = "string"

PS C:\Users\tiand> [int]$b
値 "string" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
発生場所 行:1 文字:1
+ [int]$b
+ ~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) []、RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger
 

PS C:\Users\tiand> [int]$b = 4


将数据类型放在变量名称的前面会锁定变量的类型,除非通过指定另一个数据类型显式覆盖该类型

如果试图赋予与现有类型不兼容的值,并且未显式覆盖该类型,则 Windows PowerShell 将显示错误,例如:

PS C:\Users\tiand> $a = 3

PS C:\Users\tiand> $a = "string"

PS C:\Users\tiand> [int]$a = 3

PS C:\Users\tiand> $a = "string"
値 "string" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
発生場所 行:1 文字:1
+ $a = "string"
+ ~~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException
 

PS C:\Users\tiand> [string]$a = "string"

在 PowerShell 中,通过数组包含多个项的变量的数据类型的处理方式与包含单个项的变量的数据类型不同。除非明确向数组变量指定数据类型,否则其数据类型始终是 System.Object []。此数据类型是特定于数组的。也可以通过指定另一个类型来覆盖默认类型。例如,下面的语句将变量转换为 string [] 数组类型:

PS C:\Users\tiand> [string]$a = "string"

PS C:\Users\tiand> [string[]] $a = "one","two","three"

PowerShell 变量可以是任何 .NET Framework 数据类型。此外,也可以赋予在当前进程中可用的任何完全限定的 .NET Framework 数据类型。例如,下面的语句指定 System.DateTime 数据类型:

PS C:\Users\tiand> [system.datetime]$a = "4/1/2017"

PS C:\Users\tiand> $a

2017年4月1日 0:00:00

为多个变量赋值

PowerShell 中,可以使用单个命令对多个变量赋值。所赋值的第一个元素将赋予第一个变量,第二个元素赋予第二个变量,第三个元素赋予第三个变量,依此类推。例如,下面的命令将值 4 赋予 $a 变量,将值 5 赋予 $b 变量,并将值 6 赋予 $c 变量:

PS C:\Users\tiand> $d,$e,$f = 4,5,6

PS C:\Users\tiand> $d
4

PS C:\Users\tiand> $e
5

PS C:\Users\tiand> $f
6

如果所赋值包含的元素个数超过变量个数,则将所有剩余的值都赋予最后一个变量。例如,下面的语句包含三个变量和五个值:

PS C:\Users\tiand> $d,$b,$c = 4,5,6,7,8

PS C:\Users\tiand> $d
4

PS C:\Users\tiand> $b
5

PS C:\Users\tiand>  $c
6
7
8

PS C:\Users\tiand> $c.GetType().fullname
System.Object[]

注意最后一个变量的类型是System.Object[]。


PS C:\Users\tiand> $a,$b,$c = 4,5,6,7,8

PS C:\Users\tiand> $g,$e,$f = $c

PS C:\Users\tiand> $g
6

PS C:\Users\tiand> $e
7

PS C:\Users\tiand> $f
8

上面的命令将值 6 赋予 $d 变量,将值 7 赋予 $e 变量,并将值 8 赋予 $f 变量。

通过串联变量,还可以将单个值赋予多个变量。例如,以下以下语句将值"string"赋予所有四个变量:


PS C:\Users\tiand> $b = $c = $d = 9

PS C:\Users\tiand> $b
9

PS C:\Users\tiand> $c
9

PS C:\Users\tiand> $d 
9


总结

本节介绍了Powershell中变量的类型,通过本节的学习应当掌握以下内容

  1. 根据变量的值可以判断变量的类型,可以通过变量的GetType()方法的fullname属性。

  2. Powershell变量类型不同,进行的运算也不同(如是数字值的相加还是字符串的连接)。

  3. 给多个变量赋值或是把一个值赋值给多个变量(变量的串联)。

标签:PS,12,Users,数据类型,Powershell,tiand,string,变量
From: https://www.cnblogs.com/zhang-snail/p/17976075

相关文章

  • 调光高辉度高精度调光细腻无频闪24V 48V12V60VLED升压型恒流驱动器H6911
    H6911是一款外围电路简洁的宽调光比升压调光LED恒流驱动器,可以实现高精度的恒流效果,输出电流恒流精度≤±3%,可适用于2.6-40V输入电压范围的LED恒流照明领域,输出耐压仅由MOS耐压决定。特征:启动电压 2.5V内置40V的LDO供电超低待机功耗转换效率>95%固定开关频率支持PWM方波信号调光支......
  • 算法模板 v1.3.1.20240120
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......
  • 线程同步之条件变量
    目录condition_variable简介成员函数实现线程间的通信condition_variable简介std::condition_variable是C++中用于线程同步的一个类。它通常与std::mutex一起使用,用于在一个或多个线程中阻塞,直到另一个线程修改了共享变量并通知了condition_variable。下面是一个例子,演示了如何......
  • (11)Powershell赋值运算符(二)
    (11)Powershell赋值运算符(二)上一节介绍了Powershell赋值运算符中的=,+=,-=,详细内容参考这里。本节介绍Powershell赋值运算符中的*=,/=,%=,++,--。1.乘法赋值运算符(*=)乘法赋值运算符(*=)对数字值执行乘法或追加指定数目的变量字符串值副本。如果变量是单个......
  • C++11原子变量:线程安全、无锁操作的实例解析
     在C++11中,原子变量(std::atomic)提供了一种线程安全的方式来操作共享变量。下面是一个简单的例子,演示了C++11原子变量的用法。#include<iostream>#include<atomic>#include<thread>std::atomic<int>counter(0);//声明一个原子整数变量voidincrementCounter(int......
  • P8512 [Ynoi Easy Round 2021] TEST_152 题解
    题目链接:[YnoiEasyRound2021]TEST_152题目比较抽象,翻译一下。就是有\(n\)个操作,每个操作为\((l_i,r_i,v_i)\)表示把长为\(m\)序列\(a\)的\([l_i,r_i]\)上的数覆盖为\(v_i\)。而查询为\([time_l,time_r]\),表示从\(time_l\)的操作开始执行,到\(time_r\)操作结......
  • 无涯教程-MATLAB - 变量声明
    在MATLAB环境中,每个变量都是一个数组或矩阵。您可以通过简单的方式分配变量。例如,x=3 %定义x并用一个值初始化它MATLAB将执行上述语句并返回以下输出-x=3它创建一个名为x的1-by-1矩阵,并将值3存储在其元素中,让我们再看一个例子,x=sqrt(16) %定义x并用表达式......
  • Git必知必会基础(12):忽略文件
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/10854115.html 应用场景可以在git仓库的根目录下添加—个名为.gitignore的文件,用于指定需要被git忽略的文件或文件夹应用场景:1.减少远程仓库大小占用,有些不需要push到远程仓库的内容就可以忽略2.涉及......
  • JavaScript保留字和预定义的全局变量及函数汇总
    保留字也称关键字,每种语言中都有该语言本身规定的一些关键字,这些关键字都是该语言的语法实现基础,JavaScript中规定了一些标识符作为现行版本的关键字或者将来版本中可能会用到的关键字,所以当我们定义标识符时就不能使用这些关键字了,下面介绍下JavaScript保留字和预定义的全局变量......
  • TBK-RD8T3x 开发板 与1.77' 160(RGB)×128 代码
    TBK-RD8T3x开发板是一款基于增强型的高速1T8051内核的工业级集成触控按键功能的Flash微控制器。它支持多种通信接口,如GPIO、I2C、SPI等。以下是使用GPIO接口控制1.77'160(RGB)×128的代码:#include"tbkrd8t3x.h"voidmain(){//初始化TBK-RD8T3x开发板tbk_rd8t3x_in......