Unterschied Hochkomma und Anführungszeichen in PowerShell
Es gibt bestimmt einige, die sich beim Entwickeln von PowerShell Scripts schon oft die Frage gestellt haben, was der Unterschied Zeischen Hochkomma und Anführungszeichen in PowerShell ist. Auf den Ersten Blick wird beides verwendet, um einen String (Zeichenkette) zu deklarieren. Doch es gibt kleine aber feine Unterschiede zwischen dem Apostroph (Hochkomma) und dem klassischen Anführungszeichen. Zum einen kann es Probleme mit Variablen in Strings geben, aber auch die Abarbeitungszeit des Scripts ist davon betroffen. Wir zeigen euch die Unterschiede in PowerShell.
Der Unterschied zwischen Hochkomma und Anführungszeichen in PowerShell
Es gibt definitiv einen Unterschied zwischen Hochkomma und Anführungszeichen in PowerShell. Der Unterschied mag in erster Linie nicht zu sehen sein, aber bei Variablen in Strings oder auch bei der Geschwindigkeit von Scripts spielt das eine große Rolle. Wir klären euch auf wann man ein Apostroph verwendet und wann nicht!
Deklarierung von Variablen in Strings
Ein großes Problem ist die Definition von Variablen. Hier macht es einen großen Unterschied ob ein Apostroph benutzt wird, oder ein Anführungszeichen. Ich erkläre es anhand eines Beispiels:
$var1 = "Ich bin ein String" $var2 = 'Ich bin ein String' write-host $var1 write-host $var2
Ich bin ein String Ich bin ein String
Hier wird in beiden Fällen Ich bin ein String ausgegeben. Bis hier hin erkannt man noch keinen Unterschied.
Wollen wir nun die Variablen weiter verwenden, bekommen wir ein Problem:
$var = 'Ich bin auch ein String' write-host "Er Sagte stets: $var" write-host 'Er Sagte stets: $var'
Er Sagte stets: Ich bin auch ein String Er Sagte stets: $var
Hier sieht man schön, dass die Variable in den Anführungszeichen aufgelöst wird. Die Ausgabe mit dem Hochkomma löst die Variable NICHT auf. Dafür hat diese zweite Variante auch Vorteile, aber hier komm ich später darauf zurück.
Es gibt allerdings einen Workaround. Möchte man trotzdem Variablen in Strings verwenden, so muss man vorgehen wie im angegebenen Beispiel:
$source = "C:\yourSource\" $destination = "D:\yourDestination\" $parameter = '"{0}" "{1}"' -f $source, destination write-host $parameter
"C:\yourSource\" "D:\yourDestination\"
Strings in PowerShell sollten aber immer mit einem ‘ Hochkomma, beziehungsweise Apostroph definiert werden. Warum? Das zeigt folgender Punkt.
Geschwindigkeit eines Scripts
Man glaubt es kaum, aber es macht tatsächlich einen Unterschied bei der Geschwindigkeit von PowerShell Scripts, ob man einen Apostroph oder Anführungszeichen zur definition von Strings benutzt. Als Beispiel lasse ich zwei einfache Schleifen eintausend mal durchlaufen. Diese geben einen String aus, einmal mit Apostroph und einmal mit Anführungszeichen. Mit dem Befehl Measure-Command
lasse ich die verstrichene Zeit protokollieren.
$singleQuote = Measure-Command { for ($i = 0; $i -lt 1000; $i++) { write-host 'Ich bin ein SingleQuote!' } } $doubleQuote = Measure-Command { for ($i = 0; $i -lt 1000; $i++) { write-host "Ich bin ein DoubleQuote!" } }
Days : 0 Hours : 0 Minutes : 0 Seconds : 0 Milliseconds : 813 Ticks : 8130658 TotalDays : 9,4104837962963E-06 TotalHours : 0,000225851611111111 TotalMinutes : 0,0135510966666667 TotalSeconds : 0,8130658 TotalMilliseconds : 813,0658
Days : 0 Hours : 0 Minutes : 0 Seconds : 0 Milliseconds : 844 Ticks : 8440967 TotalDays : 9,76963773148148E-06 TotalHours : 0,000234471305555556 TotalMinutes : 0,0140682783333333 TotalSeconds : 0,8440967 TotalMilliseconds : 844,0967
Wenn man einen Blick auf die Millisekunden wirft, sieht man einen Unterschied zwischen Hochkomma und Anführungszeichen in PowerShell. Der Unterschied ist zwar hier gering. Aber wenn man große Scripte mit tausenden Zeilen ausführte, dann macht sich so etwas doch bemerkbar.