Escaping Dollarzeichen im Powershell-Pfad funktioniert nicht

9

Warum funktioniert das nicht?

%Vor%

Das Echo zeigt den richtigen Pfad, aber der Befehl Get-Content erweitert die Strings $ oem und $ 1 bis leer, obwohl sie mit Escapezeichen versehen sind.

    
Belac 03.07.2013, 15:43
quelle

2 Antworten

23

Anstatt herumfluchtende Dollarzeichen zu verwenden, verwenden Sie einfache Anführungszeichen ' anstelle von Anführungszeichen " . Es verhindert, dass Powershell $ in eine Variable expandiert. Wie so,

%Vor%

Wenn Sie einen Pfad mithilfe von Variablen erstellen müssen, sollten Sie in Erwägung ziehen, Join-Path zu verwenden. Wie so,

%Vor%     
vonPryz 03.07.2013, 17:18
quelle
7

Sie haben doppelte Anführungszeichen mit einem einzigen Backtick verwendet. Dies ist eine falsche Kombination. In der Tat bin ich mir nicht sicher, ob ein einzelner Backtick alleine in irgendeinem Fall ausreicht. Ihre erfolgreichen Optionen zum Ausschließen des Dollarzeichens ($) in PowerShell sind doppelte Anführungszeichen mit einer umgekehrten Schrägstrichkombination ("\ '$ find") oder stattdessen einfache Anführungszeichen mit einem einfachen umgekehrten Schrägstrich ('\ $ find') . [Beachten Sie jedoch die Ausnahme am Ende über Funktionsaufrufparameter.] Siehe unten für Beispiele.

Auch für diejenigen, die mit der Unterscheidung nicht vertraut sind, ist es wichtig, das Backtick Zeichen () nicht mit dem einfachen Zitat zu verwechseln Zeichen (') in diesen Escapes.

[SUCCESS] Doppelter Anführungszeichen als Container mit Backslash-Backtick als escape:

%Vor%

[FAIL] Doppelter Anführungszeichen als Container mit Backslash-Apostroph als escape:

%Vor%

[SUCCESS] Einfache Anführungszeichen als Container mit einem einfachen umgekehrten Schrägstrich als escape:

%Vor%

[FAIL] Einfache Anführungszeichen als Container mit Backslash-Backtick als escape:

%Vor%

Insgesamt ist es am einfachsten, einfache Anführungszeichen als Container und einen einzelnen umgekehrten Schrägstrich als Escape zu verwenden: '$old'

Aktualisieren : Als ob das oben genannte nicht verwirrend genug wäre, wenn Sie einen Funktionsaufruf anstelle eines Befehls verwenden, werden einfache Anführungszeichen benötigt ohne ein Escape. Wenn Sie versuchen, einen Escape-Parameter für den Funktionsaufruf zu verwenden, funktioniert nicht :

[FAIL] Verwenden eines Escape in einem Funktionsparameter:

%Vor%

[SUCCESS] Einfache Anführungszeichen ohne Escape in einem Funktionsparameter verwenden:

%Vor%     
Michael 28.12.2015 07:52
quelle

Tags und Links