PowerShell中的“ @ {}”是什么意思

时间:2019-07-10 07:28:29

标签: powershell powershell-4.0

我这里有几行脚本可供查看,我注意到变量声明中带有一个值:

function readConfig {
    Param([string]$fileName)
    $config = @{}
    Get-Content $fileName | Where-Object {
        $_ -like '*=*'
    } | ForEach-Object {
        $key, $value = $_ -split '\s*=\s*', 2
        $config[$key] = $value
    }
    return $config
}

我想知道@{}$config = @{}中是什么意思?

3 个答案:

答案 0 :(得分:3)

@{}在PowerShell中定义了一个哈希表,这是一种将唯一键映射到值的数据结构(在其他语言中,此数据结构称为“字典”或“关联数组”)。

@{}本身定义了一个空的哈希表,然后可以用值填充该哈希表,例如像这样:

$h = @{}
$h['a'] = 'foo'
$h['b'] = 'bar'

还可以使用已经存在的内容定义哈希表:

$h = @{
    'a' = 'foo'
    'b' = 'bar'
}

但是请注意,当您在PowerShell 输出中看到类似的符号时,例如像这样:

abc: 23
def: @{"a"="foo";"b"="bar"}

通常不是哈希表,而是自定义对象的字符串表示形式。

答案 1 :(得分:1)

@{}的含义 可以用不同的方式看到。

如果@{}为空,则定义一个空的哈希表。

但是如果花括号之间有一些东西,可以将其用于splatting操作的顶点。

  • 哈希表
  • 喷涂

我认为不需要解释什么是哈希表。

Splatting是一种将参数值的集合作为单位传递给命令的方法。

$prints = @{
    Name = "John Doe"
    Age = 18
    Haircolor = "Red"
}

Write-Host @prints

希望有帮助! BR

编辑:

关于发问者的更新代码,答案是

它定义了一个空哈希表

答案 2 :(得分:-3)

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

"server1","server2"

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

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

@是数组运算符。