| | 0

PowerShell: Operatoren und Ausdrücke (Arithmetische Operatoren, Zuweisungsoperatoren) – Part 8

3.9 Operatoren und Ausdrücke

Die PowerShell implementiert eine große Zahl von Operatoren. An dieser Stelle werden nur die Wichtigsten behandelt. Vor Allem aber wird hier auf die zum Teil unterschiedliche Verhaltensweise von bestimmten Operatoren in bestimmten Situationen eingegangen (Polymorphismus), da dies nicht immer intuitiv erfasst werden kann. Polymorphismus bedeutet, dass sich in der PowerShell die Operatoren je nach Typ des Operanden unterschiedlich verhalten können. Mit anderen Worten, das Verhalten des Operators ändert sich passend zum Datentyp (Zahl, String, etc.).

 

3.9.1  Arithmetische Operatoren

Folgende Tabelle listet die verfügbaren arithmetischen Operatoren samt Beispielen an unterschiedlichen Datentypen:

Operator Beschreibung Beispiel Resultat
+ Addition 2 + 4
„Hallo “ + „Timm“
1,2,3 + 4,5,6
6
„Hallo Timm“
1,2,3,4,5,6
* Multiplikation 2 * 4
„a“ * 3
1,2 * 2
8
„aaa“
1,2,1,2
Differenz 6 – 2 4
/ Division 6 / 2
7 / 4
3

1,75

% Modulo 7%4 3

Tabelle 3 4: Arithmetische Operatoren

 

Wenn zwei unterschiedliche Datentypen addiert werden, hängt das Resultat in erster Linie vom Datentyp des ersten Operanden ab:

1
2
3
4
1.  2 + „0125“
127
7.  “2” + 125
2125

 

Dabei versucht die PowerShell den zweiten Operanden in den Typ des ersten zu konvertieren. Kann die Konvertierung nicht erfolgreich durchgeführt werden, tritt ein Fehler auf.
Interessant werden die Operatoren, wenn sie auf andere Datentypen angewendet werden. Es ist ganz leicht, die Zeitspanne bis zum nächsten Weihnachtsfest auszurechen:

1
2
1.  ([datetime] "12/24/2011" - [datetime]::now).totaldays
351,395397208579

 

Die Addition von zwei Arrays*  hat als Resultat ein drittes Array, welches eine Verbindung der Operanden darstellt:

1
2
3
4
5
6
7
8
9
1.  $a = 1,2,3
2.  $b = 4,5,6
3.  $a + $b
1
2
3
4
5
6

 

In diesem Beispiel haben die Arrays $a und $b den Typ [int[]]. Die Addition wird so durchgeführt, dass zuerst das dritte Array ebenfalls vom Typ [int[]] erstellt wird und anschließend die Inhalte der beiden ersten Array in das neue umkopiert werden. Etwas anderes geschieht, wenn ein Objekt von einem anderen Datentyp auf ein bestehendes Array addiert wird:

1
2
3
4
5
6
1.  $a = 1,2,3
2.  $a + „hallo“
1
2
3
hallo

 

Hier wurde zuerst ein neues Array vom Typ [Object[]] erstellt und anschließend werden die Inhalte des Arrays $a und dann der String hineinkopiert. Daraus folgt, dass Arrays vom Typ [Object[]] beliebige Datentypen als Arrayelemente aufnehmen können.

Zum Abschluss noch die Addition von Hashtables**:

1
2
3
4
5
6
7
8
9
10
11
12
1.  $left = @{a=1;b=2;c=3}
2.  $right = @{d=4;e=5;f=6}
3.  $left + $right
Name                           Value
----                           -----
d                              4
a                              1
f                              6
b                              2
e                              5
c                              3

 

*Da Arrays im Allgemeinen sehr komplex sein können, werden sie gesondert in den Kapiteln 5.1 und 5.2 behandelt.

**Hashtables werden gesondert im Kapitel 5.3 behandelt.

In diesem Fall entsteht eine weitere Hashtable, welche die ursprünglichen enthält. Die Reihenfolge der Einträge ist unsortiert (Eigenart der Hashtables). Voraussetzung für eine erfolgreiche Addition von Hash-tables ist allerdings, dass die Elemente in der Spalte „Name“ eindeutig bleiben, da sie sozusagen den primären Schlüssel der Tabelle darstellen.

 

3.9.2  Zuweisungsoperatoren

Hier könnte gefragt werden, warum Mehrzahl bei diesem Begriff? Reicht nicht das Gleichheitszeichen aus? Die Antwort ist ja. Allerdings bietet die PowerShell weitere Möglichkeiten, Zuweisungen bestimmter Arten zu verkürzen. Folgende Tabelle enthält die Zuweisungsoperatoren sowie Anwendungsbeispiele:

Operator Beispiel Äquivalent Beschreibung
= $a = 3 Einfache Wertzuweisung
+= $a += 2 $a  = $a +2 Addiert den Wert 2 zu $a und speichert das Resultat in $a
-= $a -= 13 $a  = $a – 13 Analog zu oben für Subtraktion
*= $a *= 3 $a  = $a * 3 Analog zu oben für Multiplikation
/= $a /= 3 $a  = $a / 3 Analog zu oben für Division
%= $a %= 3 $a  = $a % 3 Analog zu oben für Modulo Operationen

Tabelle 3 5: Zuweisungsoperatoren

 

Für den Einfachen Zuweisungsoperator bietet die PowerShell die Möglichkeit von Mehrfachzuweisungen:

1
2
3
4
5
6
7
1.  $a = "a"
2.  $b = "b"
3.  $a,$b = $b,$a
4.  $a
b
5.  $b
a

 

Was hier in einer Zeile passiert (Zeile 3) braucht auf Konventionelle Weise drei Zeilen Code und eine zusätzliche, temporäre Variable:

1
2
3
1.  $temp = $a
2.  $a = $b
3.  $b = $temp

 

Darüber hinaus funktioniert auch folgendes:

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