2012-04-01 20 views
8

Devo ammettere che sono un neofita bash. Voglio sempre raggiungere Python per i miei scopi di scripting della shell. Tuttavia, sto cercando di spingere me stesso per imparare qualcosa di bash. Sono curioso perché il seguente codice non funziona.Variabili di script bash in linea

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

risposta

13

non funziona a causa di espansione variabile nella stringa doppio citato accade prima è chiamato il comando. Cioè, se di tipo:

echo "$HOME" 

Il guscio trasforma questa in:

echo "/home/lars" 

prima di richiamare il comando echo. Allo stesso modo, se si digita:

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

Questo si trasforma in:

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

Prima di chiamare un comando sh. È possibile utilizzare le virgolette singole per inibire l'espansione variabile, ad esempio:

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

Si può anche sfuggire al $ con un backslash:

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

Inoltre, se si sta cercando di imparare 'bash', spende un po 'di tempo con la pagina man di 'bash', e anche [la #bash faq] (http://mywiki.wooledge.org/BashFAQ). – larsks

+0

Inoltre, si noti che nella citazione a virgoletta singola non era necessario il backslash-escape delle virgolette: ''F =" 123 "'' invece di ''F = \" 123 \ "''. – larsks

+0

Grazie! Ha senso. Sono i piccoli dettagli che fanno una grande differenza. :-) – Daniel