Я изучаю PowerShell (newbie alert !!) и пытаюсь понять, почему наблюдается следующее странное поведение. (Окружающая среда: Windows 10 с помощью PowerShell 5)массив Powershell, содержащий массив
C:\>POWERSHELL
Windows PowerShell
Copyright (C) 2015 Microsoft Corporation. All rights reserved.
PS > $A=(1,2,3) # When a variable stores a new array, ...
PS > $A # the elements are shown correctly.
1
2
3
PS > $B=$A # When the array is copied, ...
PS > $B # the elements are shown correctly.
1
2
3
PS > $B=($A,4,5,6) # When the variable stores a new array with elements from some other array ...
PS > $B # the elements are shown correctly.
1
2
3
4
5
6
PS > $B=($B,7,8,9) # But, when the variable stores a new array with elements from the array currently stored in the same variable, ...
PS > $B # something strange is seen
Length : 3
LongLength : 3
Rank : 1
SyncRoot : {1, 2, 3}
IsReadOnly : False
IsFixedSize : True
IsSynchronized : False
Count : 3
4
5
6
7
8
9
PS >
Любые указатели на то, что происходит?
При наборе этого вопроса я пытался проанализировать ситуацию. Способ, которым я это вижу:
$B=($A,4,5,6)
делает $ B массив с элементом массива.
$B=($B,7,8,9)
делает $ B массив с элементом массива с элементом массива.
Функция CLI PowerShell, которая показывает содержимое переменной, не проходит вплоть до элементов листа, но останавливается на втором уровне.
Следовательно, внутренний массив (содержимое == $ A) показан как некоторый объект.
Это объяснение правильно?
У вас нет копии, это ссылка. вы должны попробовать его с помощью $ A.Clone() – tire0011
@ tire0011, я согласен с тем, что он является ссылкой, но то же самое поведение наблюдается даже при использовании Clone() в моих приведенных выше примерах [Например, '$ B = ($ B. Clone(), 7,8,9) 'все еще показывает тот же результат для $ B] – Prem
Первый вложенный массив сжимается при выводе на консоль,' $ B' на самом деле имеет длину '4', с индексом' 0' весь массив $ A. Итак, да, ваше объяснение правильно –