Что делает символ «@» в Powershell?

Я видел символ @, используемый в PowerShell для инициализации массивов. Что именно обозначает символ @ и где об этом подробнее?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
120
0
117 019
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Оператор Splatting

Чтобы создать массив, мы создаем переменную и назначаем массив. Массивы отмечены символом «@». Давайте возьмем вышеприведенное обсуждение и воспользуемся массивом для подключения к нескольким удаленным компьютерам:

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

Они используются для массивов и хэшей.

Учебник PowerShell 7: Накопление, вызов и изменение данных

Литералы массивов в PowerShell

Ответ принят как подходящий

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

"server1","server2"

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

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

Официально @ - это «оператор массива». Вы можете узнать больше об этом в документации, устанавливаемой вместе с PowerShell, или в такой книге, как «Windows PowerShell: TFM», соавтором которой я являюсь.

Обязательно ознакомьтесь с ответом Джеффри Сновера ниже ... @ - это больше, чем просто идентификатор массива.

Eric Schoonover 15.09.2009 10:47

Вы также можете заключить вывод командлета (или конвейера) в @(), чтобы гарантировать, что вы получите массив, а не отдельный элемент.

Например, dir обычно возвращает список, но в зависимости от параметров может возвращать один объект. Если вы планируете перебирать результаты с помощью объекта foreach, вам необходимо убедиться, что вы получили список обратно. Вот надуманный пример:

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

Еще одна вещь ... пустой массив (например, для инициализации переменной) обозначается @().

[array] $ a синтаксис несколько яснее, визуально, но хороший совет.

Don Jones 13.12.2008 07:43

В PowerShell V2 @ также является Оператор Splat.

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

Это то, что я искал: этот оператор используется в контексте splat в сценариях развертывания группы ресурсов Azure.

Alex Marshall 03.08.2016 16:37

Хотя приведенные выше ответы предоставляют наиболее ответа, полезно - даже на этом позднем этапе вопроса - дать полный ответ, а именно:

Подвыражение массива (см. about_arrays)

Заставляет значение быть массивом, даже если одноэлемент или ноль, например $a = @(ps | where name -like 'foo')

Инициализатор хэша (см. about_hash_tables)

Инициализирует хеш-таблицу парами ключ-значение, например $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Брызги (см. about_splatting)

Давайте вызовем командлет с параметрами из массива или хеш-таблицы, а не с более привычными индивидуально перечисляемыми параметрами, например используя хеш-таблицу чуть выше, Copy-Item @HashArguments

Здесь струны (см. about_quoting_rules)

Давайте создадим строки с легко встраиваемыми кавычками, обычно используемыми для многострочных строк, например:

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

Поскольку этот тип вопросов (что означает обозначение «x» в PowerShell?) так часто встречается здесь, в StackOverflow, а также во многих комментариях читателей, я собрал лексикон пунктуации PowerShell, только что опубликованный на Simple-Talk.com. Прочтите все о @, а также о% и # и $ _ и? и многое другое на Полное руководство по пунктуации PowerShell. К статье прилагается эта настенная диаграмма, которая дает вам все на одном листе:

Очень подробный обзор всех случаев использования @. Я пришел сюда в поисках строки. Спасибо!

Nixphoe 12.06.2019 23:18

Другие вопросы по теме