Ich lerne PowerShell (Newbie Alarm !!) und versuche herauszufinden, warum das folgende seltsame Verhalten gesehen wird. (Umwelt: Windows 10 mit Powershell 5)Powershell-Array mit Array
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 >
Alle Hinweise auf das, was ist hier los?
Während ich diese Frage eintippte, versuchte ich die Situation zu analysieren. Die Art, wie ich es sehe:
$B=($A,4,5,6)
macht $ B ein Array mit einem Array-Element.
$B=($B,7,8,9)
macht $ B ein Array mit einem Array-Element mit einem Array-Element.
Die PowerShell CLI-Funktion, die den Variableninhalt anzeigt, geht nicht bis zu den Blattelementen, sondern auf der zweiten Ebene.
Daher wird das innerste Array (contents == $ A) als ein Objekt angezeigt.
Ist diese Erklärung korrekt?
Sie haben keine Kopie, es ist eine Referenz. Sie sollten es mit $ A.Clone() – tire0011
@ tire0011 versuchen, ich stimme zu, dass es eine Referenz ist, aber das gleiche Verhalten wird auch bei Verwendung von Clone() in meinen obigen Beispielen gesehen [zB $ B = ($ B. Clone(), 7,8,9) 'zeigt immer noch die gleiche Ausgabe für $ B] – Prem
Das erste verschachtelte Array wird geglättet, wenn es an die Konsole ausgegeben wird,' $ B' hat tatsächlich die Länge '4', wobei der Index' 0' ist das gesamte $ A-Array. Also ja, deine Erklärung richtig –