2012-04-01 16 views
8

Zugegeben, ich bin ein Bash Neophyt. Ich möchte immer Python für meine Shell-Skripting-Zwecke erreichen. Ich versuche mich jedoch dazu zu bringen, etwas Bash zu lernen. Ich bin neugierig, warum der folgende Code nicht funktioniert.Inline bash script Variablen

sh -c "F=\"123\"; echo $F" 

Antwort

13

Es funktioniert nicht, weil variable Expansion in den Strings in doppelten Anführungszeichen geschieht vor der Befehl aufgerufen wird. Das heißt, wenn ich schreibe:

echo "$HOME" 

Die Shell wandelt diese in:

echo "/home/lars" 

Bevor tatsächlich den Befehl echo aufrufen. wenn Sie in ähnlicher Weise geben:

sh -c "F=\"123\"; echo $F" 

Dies wird umgewandelt in:

sh -c "F=\"123\"; echo" 

Bevor eine der sh Befehl aufrufen. Sie können einfache Anführungszeichen verwenden variable Expansion zu hemmen, zum Beispiel:

sh -c 'F="123"; echo $F' 

Sie auch die $ mit einem Backslash entkommen:

sh -c "F=\"123\"; echo \$F" 
+0

Auch, wenn Sie versuchen, 'bash' zu lernen, verbringen etwas gute Zeit mit der 'bash'-Manpage und auch [the #bash faq] (http://mywiki.wooledge.org/BashFAQ). – larsks

+0

Beachten Sie auch, dass es im einfach zitierten Stich nicht notwendig war, die Anführungszeichen zu entziffern: ''F =" 123 "' statt" F = \ "123 \" ''. – larsks

+0

Danke! Macht Sinn. Es sind die kleinen Details, die einen großen Unterschied machen. :-) – Daniel