2008-12-12 284 views

回答

53

的PowerShell将实际治疗任何逗号分隔的列表作为一个数组:

“服务器1”, “服务器2”

因此@是在这些情况下可选。然而,对于关联数组,需要@:

@ { “密钥”= “值”; “密钥2”= “值2”}

正式地,@是 “数组运算符”。您可以在随PowerShell一起安装的文档中阅读更多内容,也可以在我共同撰写的书籍“Windows PowerShell:TFM”中找到它。

+6

请务必检查出Jeffrey Snover的答案在下面... @不仅仅是一个数组标识符。 – 2009-09-15 06:47:13

22

您还可以在@()中包装cmdlet(或管道)的输出,以确保您返回的是数组而不是单个项目。

例如,dir通常会返回一个列表,但根据选项,它可能会返回一个对象。如果你打算用foreach对象遍历结果,你需要确保你得到一个列表。这里有一个人为的例子:

$结果= @(DIR C:\ AUTOEXEC.BAT)

一件事...空数组(喜欢初始化变量)被表示@()。

+0

[array] $ a语法在视觉上更清晰一些,但是很好。 – 2008-12-13 04:43:50

85

在PowerShell V2中,@也是SPLAT运算符。

PS> # First use it to create a hashtable of parameters: 
PS> $params = @{path = "c:\temp"; Recurse= $true} 
PS> # Then use it to SPLAT the parameters - which is to say to expand a hash table 
PS> # into a set of command line parameters. 
PS> dir @params 
PS> # That was the equivalent of: 
PS> dir -Path c:\temp -Recurse:$true 

实验!请享用!从事!

杰弗里Snover [MSFT] Windows管理合伙人建筑师

+1

好的。我可以原谅这种不符合ECMA-48颜色的原因,因为哇,这很酷。 – 2010-04-22 05:16:11

22

虽然上述反应提供的答案是有益的 - 即使这个迟到的问题 - 提供完整的答案,以机智:

阵列子表达(见about_arrays

强制值是一个数组,即使一个单或空,例如$a = @(ps | where name -like 'foo')

哈希初始化(见about_hash_tables

初始化哈希表键 - 值对,例如 $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

泼洒(见about_splatting

让我们调用小命令从数组或一个散列表而不是更习惯单独列举的参数,例如参数使用哈希表的正上方,Copy-Item @HashArguments

这里串(见about_quoting_rules

让我们创建具有方便的嵌入引号,通常用于多行字符串,如字符串:

$data = @" 
line one 
line two 
something "quoted" here 
"@ 

因为这种类型的问题('x'符号在PowerShell中的含义是什么?)在StackOverflow以及许多读者注释中很常见,我将PowerShell标点符号放在一起,只是发布d在Simple-Talk.com上。阅读所有关于@以及%和#和$ _和?和更多在The Complete Guide to PowerShell Punctuation。附加到这篇文章是这张墙纸,给你在一张纸上的一切: enter image description here