Поделиться через


about_Assignment_Operators

Краткое описание

Описывает использование операторов для назначения значений переменным.

Подробное описание

Операторы присваивания присваивают переменной одно или несколько значений. Знак равенства (=) — это оператор присваивания PowerShell. PowerShell также имеет следующие составные операторы присваивания: +=, -=, *=, %=, ++, --, . ??= Составные операторы присваивания выполняют операции со значениями перед назначением.

Синтаксис

Синтаксис операторов присваивания выглядит следующим образом:

  • <assignable-expression> <assignment-operator> <value>

Назначаемые выражения включают переменные и свойства. Это может быть одно значение, массив значений, команда, выражение или инструкция.

Операторы приращения и декремента являются унарными операторами. Каждая из них имеет префиксную и постфиксную версии.

  • <assignable-expression><operator>
  • <operator><assignable-expression>

Значение присваиваемого выражения должно быть числом или быть преобразованным в число.

Использование оператора присваивания

Переменные называются пространствами памяти, в которых хранятся значения. Значения хранятся в переменных с помощью оператора =присваивания . Новое значение может заменить существующее значение переменной или добавить новое значение к существующему значению. Например, следующая инструкция присваивает переменной $MyShell значение PowerShell:

$MyShell = "PowerShell"

При назначении значения переменной в PowerShell переменная создается, если она еще не существует. Например, первая из следующих двух инструкций присваивания создает $a переменную и присваивает значение 6 $a. Второй оператор присваивания присваивает значение 12 .$a Первый оператор создает новую переменную. Второй оператор изменяет только свое значение:

$a = 6
$a = 12

Переменные в PowerShell не имеют определенного типа данных, если их не привести. Если переменная содержит только один объект, переменная принимает тип данных этого объекта. Если переменная содержит коллекцию объектов, переменная имеет тип данных System.Object . Таким образом, коллекцию можно назначить объект любого типа. В следующем примере показано, что можно добавить объекты обработки, объекты службы, строки и целые числа в переменную без возникновения ошибки:

$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12

Поскольку оператор = присваивания имеет более низкий приоритет, чем оператор |конвейера, круглые скобки не требуются для назначения результата конвейера команд переменной. Например, следующая команда сортирует службы на компьютере, а затем назначает отсортированные службы переменной $a :

$a = Get-Service | Sort-Object -Property name

Вы также можете присвоить переменной значение, созданное инструкцией , как показано в следующем примере:

$a = if ($b -lt 0) { 0 } else { $b }

В этом примере переменная назначается нулю $a , если значение $b меньше нуля. Он присваивает значение $b , $a если значение $b не меньше нуля.

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

$a = "apple", "orange", "lemon", "grape"

Чтобы назначить хэш-таблицу переменной, используйте стандартную нотацию хэш-таблицы в PowerShell. Введите символ @ at, за которым следует пара "ключ-значение", разделенные точкой с запятой ; и заключенные в фигурные скобки { }. Например, чтобы назначить хэш-сводку переменной, введите $a :

$a = @{one=1; two=2; three=3}

Чтобы присвоить шестнадцатеричные значения переменной, предшествуйте значению .0x PowerShell преобразует шестнадцатеричное значение (0x10) в десятичное значение (в данном случае 16) и присваивает это значение переменной $a . Например, чтобы присвоить переменной значение 0x10, введите $a :

$a = 0x10

Чтобы присвоить переменной экспоненциальное значение, введите корневое число, букву eи число, кратное 10. Например, чтобы присвоить переменной значение 3,1415 значению $a 1000, введите:

$a = 3.1415e3

PowerShell также может преобразовывать килобайты KB, мегабайты MBи гигабайты GB в байты. Например, чтобы присвоить переменной значение 10 килобайт, введите $a :

$a = 10kb

Использование операторов составного присваивания

Составные операторы присваивания выполняют числовые операции со значениями перед назначением.

Важно!

Составные операторы присваивания не используют динамическую область. Переменная всегда находится в текущем область.

В следующем примере переменная $x определяется в глобальном область. Фигурные скобки создают новый область. Переменная $x внутри фигурных скобок является новым экземпляром, а не копией глобальной переменной.

$x = 1 # Global scope
& { $x += 1; $x }
1

При использовании оператора обычного присваивания вы получаете копию переменной из родительского область. Но обратите внимание, что $x в родительском область не изменяется.

$x = 1 # Global scope
& { $x = $x + 1; $x }
"Global `$x = $x"
2
Global $x = 1

Оператор присваивания по сложению

Оператор += присваивания путем сложения либо увеличивает значение переменной, либо добавляет указанное значение к существующему значению. Действие зависит от того, имеет ли переменная числовой или строковый тип и содержит ли переменная одно значение (скаляр) или несколько значений (коллекция).

Оператор += объединяет две операции. Сначала добавляется, а затем назначается. Таким образом, следующие операторы эквивалентны:

$a += 2
$a = ($a + 2)

Если переменная содержит одно числовое значение, += оператор увеличивает существующее значение на величину в правой части оператора. Затем оператор присваивает результирующее значение переменной. В следующем примере показано, как использовать += оператор для увеличения значения переменной:

$a = 4
$a += 2
$a
6

Если значение переменной является строкой, значение в правой части оператора добавляется к строке следующим образом:

$a = "Windows"
$a += " PowerShell"
$a
Windows PowerShell

Если значение переменной является массивом, += оператор добавляет значения справа от оператора к массиву. Если массив явно не введен путем приведения, к массиву можно добавить любой тип значения следующим образом:

$a = 1,2,3
$a += 2
$a
1
2
3
2

и

$a += "String"
$a
1
2
3
2
String

Если значение переменной является хэш-таблицей += , оператор добавляет значение справа от оператора в хэш-таблицу. Однако, поскольку в хэш-таблицу можно добавить только один тип, все остальные назначения завершаются ошибкой.

Например, следующая команда присваивает переменной хэш-таблицу $a . Затем он использует += оператор для добавления другой хэш-таблицы в существующую хэш-таблицу, фактически добавляя новую пару "ключ-значение" в существующую хэш-таблицу. Эта команда выполнена успешно, как показано в выходных данных:

$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name                           Value
----                           -----
a                              1
b                              2
mode                           write
c                              3

Следующая команда пытается добавить целое число "1" в хэш-таблицу в переменной $a . Эта команда завершается ошибкой:

$a = @{a = 1; b = 2; c = 3}
$a += 1
InvalidOperation:
Line |
   2 |  $a += 1
     |  ~~~~~~~
     | A hash table can only be added to another hash table.

Оператор присваивания с помощью вычитания

Оператор -= присваивания с помощью вычитания уменьшает значение переменной на значение, указанное в правой части оператора. Этот оператор не может использоваться со строковыми переменными и не может использоваться для удаления элемента из коллекции.

Оператор -= объединяет две операции. Сначала вычитается, а затем присваивается. Таким образом, следующие операторы эквивалентны:

$a -= 2
$a = ($a - 2)

В следующем примере показано, как использовать оператор для -= уменьшения значения переменной:

$a = 8
$a -= 2
$a
6

Оператор присваивания также можно использовать -= для уменьшения значения элемента числового массива. Для этого укажите индекс элемента массива, который требуется изменить. В следующем примере значение третьего элемента массива (элемент 2) уменьшается на 1:

$a = 1,2,3
$a[2] -= 1
$a
1
2
2

Оператор нельзя использовать для -= удаления значений переменной. Чтобы удалить все значения, назначенные переменной, используйте командлеты Clear-Item или Clear-Variable , чтобы присвоить переменной $null значение или "" .

$a = $null

Чтобы удалить определенное значение из массива, используйте нотацию массива $null , чтобы присвоить значение определенному элементу. Например, следующая инструкция удаляет второе значение (позицию индекса 1) из массива:

$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3

Чтобы удалить переменную, используйте командлет Remove-Variable . Этот метод полезен, если переменная явно приведена к определенному типу данных и требуется нетипизированной переменной. Следующая команда удаляет переменную $a :

Remove-Variable -Name a

Оператор присваивания по умножению

Оператор *= присваивания путем умножения умножает числовое значение или добавляет указанное число копий строкового значения переменной.

Если переменная содержит одно числовое значение, это значение умножается на значение в правой части оператора. Например, в следующем примере показано, как использовать оператор для *= умножения значения переменной:

$a = 3
$a *= 4
$a
12

В этом случае *= оператор объединяет две операции. Сначала он умножается, а затем назначается. Таким образом, следующие операторы эквивалентны:

$a *= 2
$a = ($a * 2)

Если переменная содержит строковое значение, PowerShell добавляет указанное число строк к значению следующим образом:

$a = "file"
$a *= 4
$a
filefilefilefile

Чтобы умножить элемент массива, используйте индекс для определения элемента, который требуется умножить. Например, следующая команда умножает первый элемент в массиве (позиция индекса 0) на 2:

$a[0] *= 2

Назначение по оператору деления

Оператор /= присваивания по деления делит числовое значение на значение, указанное в правой части оператора. Оператор нельзя использовать со строковыми переменными.

Оператор /= объединяет две операции. Сначала он делится, а затем назначается. Таким образом, следующие два оператора эквивалентны:

$a /= 2
$a = ($a / 2)

Например, следующая команда использует /= оператор для деления значения переменной:

$a = 8
$a /=2
$a
4

Чтобы разделить элемент массива, используйте индекс для идентификации элемента, который требуется изменить. Например, следующая команда делит второй элемент в массиве (индексная позиция 1) на 2:

$a[1] /= 2

Назначение по модулю оператора

Оператор %= присваивания по модулю делит значение переменной на значение в правой части оператора. %= Затем оператор назначает остаток (известный как модуль) переменной. Этот оператор можно использовать только в том случае, если переменная содержит одно числовое значение. Этот оператор нельзя использовать, если переменная содержит строковую переменную или массив.

Оператор %= объединяет две операции. Сначала он делит и определяет остаток, а затем назначает остаток переменной. Таким образом, следующие операторы эквивалентны:

$a %= 2
$a = ($a % 2)

В следующем примере показано, как использовать %= оператор для сохранения модуля коэффициента:

$a = 7
$a %= 4
$a
3

Операторы приращения и уменьшения

Оператор ++ приращения увеличивает значение переменной на 1. При использовании оператора приращения в простой инструкции значение не возвращается. Чтобы просмотреть результат, отобразите значение переменной следующим образом:

$a = 7
++$a
$a
8

Чтобы принудительно возвращать значение, заключите переменную и оператор в круглые скобки следующим образом:

$a = 7
(++$a)
8

Оператор инкремента можно разместить до (префикс) или после (постфикс) переменной. Префиксная версия оператора увеличивает переменную перед ее значением в операторе следующим образом:

$a = 7
$c = ++$a
$a
8
$c
8

Постфиксная версия оператора увеличивает переменную после того, как ее значение используется в инструкции . В следующем примере переменные и $a имеют разные значения, $c так как значение присваивается $c до изменения$a:

$a = 7
$c = $a++
$a
8
$c
7

Оператор -- декремента уменьшает значение переменной на 1. Как и в случае с оператором приращения, при использовании оператора в простой инструкции значение не возвращается. Используйте круглые скобки, чтобы вернуть значение следующим образом:

$a = 7
--$a
$a
6
(--$a)
5

Префиксная версия оператора уменьшает переменную перед ее значением в инструкции следующим образом:

$a = 7
$c = --$a
$a
6
$c
6

Постфиксная версия оператора уменьшает переменную после использования ее значения в операторе . В следующем примере переменные и $a имеют разные значения, $d так как значение присваивается $d до изменения$a:

$a = 7
$d = $a--
$a
6
$d
7

Оператор присваивания объединения со значением NULL

Оператор назначения объединения со значением NULL ??= присваивает значение правого операнда левому операнду только в том случае, если левый операнд имеет значение NULL. Оператор ??= не вычисляет правый операнд, если значение левого операнда отлично от NULL.

$x = $null
$x ??= 100
$x
100

Дополнительные сведения см. в разделе Оператор объединения null.

Типы Microsoft .NET

По умолчанию, когда переменная имеет только одно значение, значение, присвоенное переменной, определяет тип данных переменной. Например, следующая команда создает переменную с типом System.Int32 :

$a = 6

Чтобы найти тип .NET переменной, используйте метод GetType и его свойство FullName . Не забудьте включить круглые скобки после имени метода GetType , даже если вызов метода не имеет аргументов:

$a = 6
$a.GetType().FullName
System.Int32

Чтобы создать переменную, содержащую строку, назначьте ей строковое значение. Чтобы указать, что значение является строкой, заключите его в кавычки следующим образом:

$a = "6"
$a.GetType().FullName
System.String

Если первое значение, присвоенное переменной, является строкой, PowerShell обрабатывает все операции как строковые операции и приводит новые значения к строкам. Это происходит в следующем примере:

$a = "file"
$a += 3
$a
file3

Если первое значение является целым числом, PowerShell обрабатывает все операции как целочисленные операции и приводит новые значения к целым числам. Это происходит в следующем примере:

$a = 6
$a += "3"
$a
9

Вы можете привести новую скалярную переменную к любому типу .NET, поместив имя типа в квадратные скобки перед именем переменной или первым значением присваивания. При приведение переменной определяется тип данных, которые могут храниться в переменной.

Например, следующая команда приводит переменную к строковом типу:

[string]$a = 27
$a += 3
$a
273

В следующем примере приводится первое значение вместо приведения переменной:

$a = [string]27

Изменить тип данных существующей переменной невозможно, если ее значение не удается преобразовать в новый тип данных.

$a = "string"
[int]$a
InvalidArgument: Cannot convert value "string" to type "System.Int32". Error:
"The input string 'string' was not in a correct format."

Чтобы изменить тип данных, необходимо заменить его значение следующим образом:

[int]$a = 3

Кроме того, если перед именем переменной указан тип данных, тип этой переменной блокируется, если явно не переопределить тип, указав другой тип данных. Если вы попытаетесь назначить значение, несовместимое с существующим типом, и не переопределить тип явным образом, PowerShell отобразит ошибку, как показано в следующем примере:

$a = 3
$a = "string"
[int]$a = 3
$a = "string"
MetadataError:
Line |
   2 |  $a = "string"
     |  ~~~~~~~~~~~~~
     | Cannot convert value "string" to type "System.Int32". Error: "The input
string 'string' was not in a correct format."
[string]$a = "string"

В PowerShell типы данных переменных, содержащих несколько элементов в массиве, обрабатываются иначе, чем типы данных переменных, содержащих один элемент. Если тип данных не назначен конкретно переменной массива, тип данных всегда System.Object []имеет значение . Этот тип данных зависит от массивов.

Иногда можно переопределить тип по умолчанию, указав другой тип. Например, следующая команда приводит переменную к типу массива string [] :

[string []] $a = "one", "two", "three"

Переменные PowerShell могут иметь любой тип данных .NET. Кроме того, можно назначить любой полный тип данных .NET, доступный в текущем процессе. Например, следующая команда указывает System.DateTime тип данных:

[System.DateTime]$a = "5/31/2005"

Переменной будет присвоено значение, соответствующее типу System.DateTime данных. Значение переменной $a будет следующим:

Tuesday, May 31, 2005 12:00:00 AM

Назначение нескольких переменных

В PowerShell можно назначать значения нескольким переменным с помощью одной команды. Первый элемент значения присваивания присваивается первой переменной, второй элемент присваивается второй переменной, третий элемент — третьей переменной. Это называется множественным присваиванием.

Например, следующая команда присваивает переменной значение 1 $a , переменной — значение 2 $b , а переменной — значение 3 $c :

$a, $b, $c = 1, 2, 3

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

$a, $b, $c = 1, 2, 3, 4, 5

Поэтому PowerShell присваивает переменной значение 1 $a , а переменной — значение 2 $b . Она присваивает переменной значения 3, 4 и 5 $c . Чтобы присвоить значения в переменной $c трем другим переменным, используйте следующий формат:

$d, $e, $f = $c

Эта команда присваивает переменной значение 3 $d , переменной — значение 4 $e , а переменной $f — значение 5.

Если значение присваивания содержит меньше элементов, чем переменные, остальным переменным присваивается значение $null. Например, следующая команда содержит три переменные и два значения:

$a, $b, $c = 1, 2

Поэтому PowerShell присваивает переменной значение 1 $a , а переменной — значение 2 $b . Переменная $c имеет значение $null.

Можно также назначить одно значение нескольким переменным, связав переменные. Например, следующая команда присваивает значение "три" всем четырем переменным:

$a = $b = $c = $d = "three"

Помимо использования операции присваивания для задания значения переменной, можно также использовать командлет Set-Variable . Например, следующая команда использует Set-Variable для назначения массива 1, 2, 3 переменной $a .

Set-Variable -Name a -Value 1, 2, 3

См. также раздел