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

What is '@{}' meaning in PowerShell

我这里有一行脚本供审查,我注意到变量声明有一个值:

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 = @{} 中是什么意思?

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

如果 @{} 为空,则定义空散列 table。

但是如果大括号之间有东西,它可以用在展开操作的上下文中。

  • 哈希Table
  • 飞溅

我认为没有必要解释哈希 table 是什么。

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

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

Write-Host @prints

希望对您有所帮助! BR

编辑:

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

它定义了一个空散列table

PowerShell 中的

@{} 定义了一个哈希表,一种用于将唯一键映射到值的数据结构(在其他语言中,这种数据结构称为 "dictionary" 或 "associative array")。

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

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

哈希表也可以定义为已经存在的内容:

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

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

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

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