Существует несколько способов для объединения двух массивов.Что касается вашего вопроса в приведенном выше комментарии:
Интересно, я не знал, что "," отличается от ";"при формировании списка ...
В PowerShell ,
является собственным оператором, где его поведение отличается, если используется в унарном или двоичном операторе.
От about_operators :
В качестве двоичного оператора запятая создает массив.Как унарный оператор, запятая создает массив с одним членом.Поставьте запятую перед членом.
В коде @("something", $x)
вы используете оператор в двоичном виде.Таким образом, создается новый массив с двумя записями.Первая запись - это строка «что-то», вторая запись содержит массив строк.Это потому, что PowerShell интерпретирует это как: «Хорошо, я создам новый массив с двумя записями (=« что-то »и ссылкой, указывающей на массив).
Мы можем проверить это с помощью или Get-Member
:
C:\> $y | Get-Member
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
...
TypeName: System.Object[]
Name MemberType Definition
---- ---------- ----------
Add Method int IList.Add(System.Object value)
...
Как видно, Get-Member
показывает использование двух TypeName
s. Первый - строка, второй - массив.
При изменении кода на@("something"; $x)
no ,
-оператор больше не используется. Вместо этого код теперь разделен примерно на три «команды», поскольку используется разделитель команд (= ;
).
- Cmd1: «что-то»
- Cmd2: $ x ->, который выводит содержимое массива
- Cmd3: @ () -> гарантирует, что выражения в скобках будут возвращены как массив.
Вы также можете удалить разделитель команд и определить $y
в нескольких строках:
PS C:\>$y = @("something"
>>> $x
>>> )
Если вы будете менее неоднозначными, я бы порекомендовал объединить два массива следующим образом:
PS C:\> $a = 1
PS C:\> $b = @(2,3,4)
PS C:\> $c = @()
PS C:\> $c += $a
PS C:\> $c += $b
PS C:\> $c
1
2
3
4
PS C:\> $c | gm
TypeName: System.Int32
Name MemberType Definition
...
Конечно, это «более» код, но он менее неоднозначен.
Надеюсь, это поможет.