@符号在PowerShell中的应用

1.@在以下用法都一样(array);并且是可选的

$a = 1,2,3,4,5
$b = (1,2,3,4,5)
$c = @(1,2,3,4,5)

PS C:\Users\Administrator> $a = 1,2,3,4,5
PS C:\Users\Administrator> $b = (1,2,3,4,5)
PS C:\Users\Administrator> $c = @(1,2,3,4,5)
PS C:\Users\Administrator> $a
1
2
3
4
5
PS C:\Users\Administrator> $b
1
2
3
4
5
PS C:\Users\Administrator> $c
1
2
3
4
5
PS C:\Users\Administrator>

2.在创建空array时,必须使用@

$a = @()
$b = ()    #错误写法

PS C:\Users\Administrator> $a = @()
PS C:\Users\Administrator> $b = ()
所在位置 行:1 字符: 7
+ $b = ()
+       ~
“(”后面应为表达式。
 + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
 + FullyQualifiedErrorId : ExpectedExpression

PS C:\Users\Administrator> $a.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array


PS C:\Users\Administrator>

3.@在以下用法不一样(hashtable;也叫关联数组);并且是必选的

$a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}   #这是错误的写法
$b = @{"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}

PS C:\Users\Administrator> $a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
所在位置 行:1 字符: 7
+ $a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
+       ~~~~~~
赋值表达式无效。赋值运算符输入必须是能够接受赋值的对象,例如变量或属性。
所在位置 行:1 字符: 29
+ $a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
+                             ~~~~~
赋值表达式无效。赋值运算符输入必须是能够接受赋值的对象,例如变量或属性。
所在位置 行:1 字符: 38
+ $a = {"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
+                                      ~~~~~~
赋值表达式无效。赋值运算符输入必须是能够接受赋值的对象,例如变量或属性。
 + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
 + FullyQualifiedErrorId : InvalidLeftHandSide

PS C:\Users\Administrator> $b = @{"Name"="xiamingliang";"Age"=18;"City"="ShangHai"}
PS C:\Users\Administrator> $b

Name                           Value
----                           -----
Name                           xiamingliang
Age                            18
City                           ShangHai


PS C:\Users\Administrator> $b.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Hashtable                                System.Object


PS C:\Users\Administrator>

4.@可以强制将值设置为数组,即使对方为null

$a = Get-Process | where name -like 'balabalabala'

PS C:\Users\Administrator\Desktop> $a = Get-Process | where name -like 'balabalabala'

PS C:\Users\Administrator\Desktop> $a

PS C:\Users\Administrator\Desktop> $a.GetType()
不能对 Null 值表达式调用方法。
所在位置 行:1 字符: 1

+ $a.GetType()

+ ~~~~~~~~~~~~
 + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
 + FullyQualifiedErrorId : InvokeMethodOnNull
 ~~~~~~~~~~~~


PS C:\Users\Administrator\Desktop>

$b = @(Get-Process | where name -like 'balabalabala')

PS C:\Users\Administrator\Desktop> $b = @(Get-Process | where name -like 'balabalabala')

PS C:\Users\Administrator\Desktop> $b

PS C:\Users\Administrator\Desktop> $b.GetType()

IsPublic IsSerial Name                                     BaseType            

-------- -------- ----                                     --------

True     True     Object[]                                 System.Array        



PS C:\Users\Administrator\Desktop>

5.@还可以用于定义多行字符串

5.1无引号等特殊字符时,两者基本无差别

细微的换行差别除外

$a = "
hello,
world!!
"

$b = @"
hello,
world!!
"@

PS C:\Users\Administrator> $a = "
>> hello,
>> world!!
>> "
PS C:\Users\Administrator>
PS C:\Users\Administrator> $b = @"
>> hello,
>> world!!
>> "@
PS C:\Users\Administrator> $a

hello,
world!!

PS C:\Users\Administrator> $b
hello,
world!!
PS C:\Users\Administrator>

5.2有引号等特殊字符时,必须使用单引号或@或转义字符

$c  = '
hello,
world!!"test"
'

$c1  = "
hello,
world!!""test""
"

$c2  = "
hello,
world!!`"test`"
"

$d  = @"
hello,
world!!"test"
"@


PS C:\Users\Administrator> $c  = '
>> hello,
>> world!!"test"
>> '
PS C:\Users\Administrator>
PS C:\Users\Administrator> $c1  = "
>> hello,
>> world!!""test""
>> "
PS C:\Users\Administrator>
PS C:\Users\Administrator> $c2  = "
>> hello,
>> world!!`"test`"
>> "
PS C:\Users\Administrator>
PS C:\Users\Administrator> $d  = @"
>> hello,
>> world!!"test"
>> "@
PS C:\Users\Administrator> $c

hello,
world!!"test"

PS C:\Users\Administrator> $c1

hello,
world!!"test"

PS C:\Users\Administrator> $c2

hello,
world!!"test"

PS C:\Users\Administrator> $d
hello,
world!!"test"
PS C:\Users\Administrator>
PS C:\Users\Administrator>

5.3在变量使用上两者基本无差别

$str = "test for string."
$a  = "
hello,
world!!$str
"

$b  = @"
hello,
world!!$str
"@

PS C:\Users\Administrator> $str = "test for string."
PS C:\Users\Administrator> $a  = "
>> hello,
>> world!!$str
>> "
PS C:\Users\Administrator>
PS C:\Users\Administrator> $b  = @"
>> hello,
>> world!!$str
>> "@
PS C:\Users\Administrator>
PS C:\Users\Administrator> $a

hello,
world!!test for string.

PS C:\Users\Administrator> $b
hello,
world!!test for string.
PS C:\Users\Administrator>
PS C:\Users\Administrator>
$str = "test for string1."
$c  = "
hello,
world!!{0}
" -f $str

$d  = @"
hello,
world!!{0}
"@ -f $str

PS C:\Users\Administrator> $str = "test for string1."
PS C:\Users\Administrator> $c  = "
>> hello,
>> world!!{0}
>> " -f $str
PS C:\Users\Administrator>
PS C:\Users\Administrator> $d  = @"
>> hello,
>> world!!{0}
>> "@ -f $str
PS C:\Users\Administrator>
PS C:\Users\Administrator> $c

hello,
world!!test for string1.

PS C:\Users\Administrator> $d
hello,
world!!test for string1.
PS C:\Users\Administrator>
PS C:\Users\Administrator>

【封面图。。。】


PowerShell.png

文章若有纰漏处,还望大家及时指正...

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容