Что означает «@ {}» в PowerShell - PullRequest
1 голос
/ 10 июля 2019

У меня есть строка сценариев для просмотра здесь, я заметил объявление переменной со значением:

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 ]

3 голосов
/ 10 июля 2019

@{} в PowerShell определяет хеш-таблицу, структуру данных для сопоставления уникальных ключей со значениями (в других языках эта структура данных называется «словарь» или «ассоциативный массив»).

@{} сам по себе определяет пустую хеш-таблицу, которая затем может быть заполнена значениями, например, как это:

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

Hashtables также могут быть определены с их уже существующим содержанием:

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

Обратите внимание, однако, что когда вы видите аналогичные обозначения в PowerShell , выведите , например. как это:

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

обычно не хеш-таблица, а строковое представление пользовательского объекта.

1 голос
/ 10 июля 2019

Значение @{} можно увидеть по-разному.

Если @{} пусто, определяется пустая хеш-таблица.

Но если между фигурными скобками есть что-то, это можно использовать в контексте операции разбрызгивания.

  • Хеш-таблица
  • Splatting

Я думаю, что нет необходимости объяснять, что такое хеш-таблица.

Splatting - это метод передачи набора значений параметров команде в виде единицы.

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

Write-Host @prints

Надеюсь, это поможет! BR

Edit:

Относительно обновленного кода от спрашивающего ответ

Он определяет пустую хеш-таблицу .

0 голосов
/ 10 июля 2019

PowerShell будет обрабатывать любой список через запятую как массив:

"server1","server2"

Так что @ является необязательным в этих случаях. Однако для ассоциативных массивов требуется @:

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

Официально @ является оператором массива.

...