我这里有几行脚本可供查看,我注意到变量声明中带有一个值:
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 = @{}
中是什么意思?
答案 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"}
@
是数组运算符。