Variablen in einer Zeichenfolge auswerten

8

Die letzte Zeile in diesem Skript funktioniert nicht wie erwartet:

%Vor%

Hier wird das Echo 'eval cat $ myfile' ausgegeben. Wie kann ich 'eval cat afile.txt' drucken?

    
Robert Kubrick 13.08.2013, 21:08
quelle

4 Antworten

26

Nehmen wir die Dinge Schritt für Schritt:

Wenn Sie dies tun:

%Vor%

Sie verhindern, dass die Shell $myfile interpoliert. Also:

%Vor%

Wenn Sie die Interpolation zulassen möchten, können Sie doppelte Anführungszeichen verwenden:

%Vor%

Das hemmt natürlich die Interpretation von $mycmd , wenn Sie eval ausführen.

%Vor%

Vergleiche das mit:

%Vor%

Wahrscheinlich möchten Sie das $mycmd in einer echo-Anweisung auswerten, wenn Sie es echotieren:

%Vor%     
David W. 13.08.2013, 21:57
quelle
7

Sie können schreiben:

%Vor%

oder etwas robuster:

%Vor%

Das heißt, ich würde empfehlen, eval möglichst zu vermeiden; Es ist sehr anfällig, da es viele komplizierte Schritte in der Bash-Befehlszeilenverarbeitung gibt und die Verwendung von eval bedeutet normalerweise, dass Sie diese Schritte mehr als einmal ausführen. Es ist schwer zu verfolgen, was wirklich vor sich geht.

    
ruakh 13.08.2013 21:12
quelle
1

Sie müssen das Echo auswerten und nicht umgekehrt:

%Vor%

oder

%Vor%

Ich denke, ersteres ist vorzuziehen, aber zitieren Sie zumindest die variable Erweiterung.

    
seanmcl 13.08.2013 21:11
quelle
1

Wenn Sie bash verwenden, verwenden Sie am besten Arrays:

%Vor%     
konsolebox 13.08.2013 21:18
quelle

Tags und Links