Geheimnisvolle PowerShell (Teil 3) – wenn null doch etwas ist

Die PowerShell besitzt so manche Eigenheiten, auf die sich auch etwas erfahrenere Anwender (sprich der Autor dieser Zeilen) nicht auf Anhieb einen Reim machen können (und ein wenig Nachhilfe vom „Erschaffer“ von PowerShell Script benötigen, denn dieser gerne und ergiebig in verschiedenen Foren erteilt). Ein solche Fall ist z.B. der foreach-Befehl, der dann auch einmal durchläuft, wenn das Array/die Collection, die durchlaufen werden soll, leer ist. Ein

foreach($z in $Liste) { „`$z ist $z „}

führt dann auch zu mindestens einem Durchlauf, wenn $Liste keinen Wert besitzt, also $null ist. Ein wenig ins Extreme getrieben führt auch

foreach($z in $null) { „`$z ist $z „}

dazu, dass der Befehlsblock einmal ausgeführt wird. Der Hintergrund ist (vermutlich), dass auch $null einen Wert darstellt (eben einen $null-Wert) und damit ein Wert vorliegt, auch wenn das sicher nicht das ist, was sich die meisten Anwender als Verhalten vorstellen oder wünschen würden.

Ein (aus meiner Sicht) etwas „verrückte“ Abhilfe, um den überflüssigen Durchlauf zu verhindern, ist es, z.B. ein leeres Array „aufzuaddieren“:

foreach($z in $Liste+=@()) { „`$z ist $z „}

Diese Variante führt dazu, dass der Befehlsblock sooft wiederholt wird, wie $Liste Elemente enthält. Ist $Liste dagegen $null, wird kein Durchlauf durchgeführt. Ein Verhalten, das sich die meisten Anwender vermutlich als „Normalfall“ wünschen dürften.

Zu diesem „Phänomen“ hat sich als Nachspann zu einem Blog-Eintrag von Bruce Payette (der Kopf hinter der PowerShell-Skriptsprache) ein interessanter Diskussionsthread entspannt, in dem Bruce den Umgang mit Arrays erklärt und die verschiedenen „Feinheiten“ erläutert (die Frage, warum ein $null-Wert unbedingt als ein Wert behandelt werden muss, hat er aus meiner Sicht nicht beantwortet – aber es sagt auch niemand, dass man alles verstehen muss, denn PowerShell Script ist eine recht vielschichtige Angelegenheit).

Schreibe einen Kommentar

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s