Powershell中的“@”符号有什么作用?

时间:2008-12-12 19:32:40

标签: syntax powershell

我在PowerShell中看到了@符号来初始化数组。 @符号究竟是什么意思?我在哪里可以阅读更多关于它的内容?

5 个答案:

答案 0 :(得分:104)

在PowerShell V2中,@也是Splat operator

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

答案 1 :(得分:68)

PowerShell实际上将任何以逗号分隔的列表视为数组:

"server1","server2"

所以@在这些情况下是可选的。但是,对于关联数组,@是必需的:

@{"Key"="Value";"Key2"="Value2"}

官方说来,@是“阵列运营商”。您可以在随PowerShell一起安装的文档中或在我合着的“Windows PowerShell:TFM”这样的书中阅读有关它的更多信息。

答案 2 :(得分:38)

虽然上述回复提供了大多数的答案,但即使在问题的后期,这也很有用 - 提供完整的答案,即:

数组子表达式(请参阅about_arrays

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

哈希初始化程序(请参阅about_hash_tables

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

Splatting (请参阅about_splatting

让我们使用数组或散列表中的参数调用cmdlet,而不是使用更常见的单独枚举参数,例如:使用上面的哈希表,Copy-Item @HashArguments

此处字符串(请参阅about_quoting_rules

让我们使用易于嵌入的引号创建字符串,通常用于多行字符串,例如:

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

因为在StackOverflow以及许多读者评论中,这种类型的问题('x'表示法在PowerShell中的含义是什么意思?)如此常见,所以我整理了一个PowerShell标点符号,刚刚发布在Simple-Talk.com上。阅读所有关于@以及%和#和$ _和?还有更多The Complete Guide to PowerShell Punctuation。这篇文章附有文章,可以在一张纸上提供所有内容: enter image description here

答案 3 :(得分:26)

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

例如,dir通常返回一个列表,但根据选项,它可能会返回一个对象。如果您计划使用foreach-object迭代结果,则需要确保返回列表。这是一个人为的例子:

$results = @( dir c:\autoexec.bat)

还有一件事......一个空数组(比如初始化一个变量)用@()表示。

答案 4 :(得分:8)

Splatting Operator

要创建数组,我们创建一个变量并分配数组。数组以“@”符号表示。让我们进行上面的讨论,并使用数组连接到多台远程计算机:

$strComputers = @("Server1", "Server2", "Server3")<enter>

它们用于数组和散列。

PowerShell Tutorial 7: Accumulate, Recall, and Modify Data

Array Literals In PowerShell