Übergeben einer Zeichenfolge in Anführungszeichen an system (), wobei die Anführungszeichen intakt bleiben

8

Dieses Problem betrifft Perl v5.24.0 unter Windows 10

Außer für die einfachsten Fälle. Es ist immer ein Problem, Befehlszeilen und Parameterlisten zwischen Programmen zu übergeben. Unter Berücksichtigung der Auswirkungen von Leerzeichen und Shell-Metazeichen, möglicherweise so, dass die Daten über mehrere Ebenen von Aufrufen intakt bleiben, kann eine Unordnung von Escape- und Anführungszeichen

beinhalten

Das Allheilmittel war schon immer die Mehrfachparameterform von system (die auch versucht, die Shell nicht als Vermittler zu bezeichnen), so dass jeder Parameter zuverlässig getrennt wird, ohne auf Anführungszeichen zurückgreifen zu müssen

Ein Anruf wie dieser

%Vor%

ist viel einfacher auf das Auge geschrieben so

%Vor%

Ich kann jedoch keine Möglichkeit sehen, Werte zu übergeben, die einschließen umgebende Anführungszeichen

Wenn ich ein Testprogramm schreibe

show.pl

%Vor%

und rufen Sie dann

auf %Vor%

dann ist die Ausgabe, die ich bekomme, was ich erwarte

%Vor%

Angenommen, ich möchte die Zeichenfolge "xxx" übergeben. Wenn ich es versuche

%Vor%

Dann werden die Anführungszeichen irgendwann entfernt und die Ausgabe ist identisch mit dem vorhergehenden Beispiel

Wie rufe ich system an, so dass die Ausgabe ["\"xxx\""] ?

lautet

Ich habe alle möglichen Fluchtversuche versucht, aber die Lösung entzieht sich mir.

    
Borodin 06.07.2016, 10:34
quelle

1 Antwort

4

Das Problem:

%Vor%

Ausgabe:

%Vor%

Das ist so kaputt! [1]

Lösung:

%Vor%

Ausgabe:

%Vor%
  1. Perl muss eine Befehlszeile erstellen, auch wenn die Shell nicht verwendet wird. Im Gegensatz zu Unix, bei dem der Systemaufruf zum Ausführen eines Programms den Pfad zu einem Programm übernimmt und eine Liste von Argumenten, der Windows Systemaufruf [2] Das ist der Grund, warum die Syntax system BLOCK LIST nicht hilft.

  2. Tatsächlich liegt es an der Anwendung, die Befehlszeile nach Argumenten zu analysieren! Zum Glück gibt es dafür einen Systemaufruf , so hat sich ein Standard gebildet.

ikegami 06.07.2016 14:35
quelle

Tags und Links