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 |