2012-04-01 11 views
8

Es cierto que soy un neófito de bash. Siempre quiero llegar a Python para mis propósitos de creación de scripts. Sin embargo, estoy tratando de presionarme para aprender algo. Tengo curiosidad por qué el siguiente código no funciona.Variables de script de bash en línea

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

Respuesta

13

No funciona porque la expansión variable en la cadena entre comillas dobles sucede antes se llama el comando. Es decir, si escribo:

echo "$HOME" 

La cáscara transforma esto en:

echo "/home/lars" 

De hecho, antes de llamar al comando echo. Del mismo modo, si escribe:

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

Esto se transforma en:

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

Antes de llamar a un comando sh. Puede utilizar comillas simples para inhibir la expansión de variables, por ejemplo:

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

También puede escapar de la $ con una barra invertida:

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

Además, si usted está tratando de aprender 'bash', pasas un poco de tiempo de calidad con la página man 'bash', y también [la faq #bash] (http://mywiki.wooledge.org/BashFAQ). – larsks

+0

Además, tenga en cuenta que en el punto único entre comillas no fue necesario hacer una barra diagonal inversa-escape de las comillas: ''F =" 123 "'' en lugar de ''F = \" 123 \ "''. – larsks

+0

Gracias! Tiene sentido completo. Son los pequeños detalles los que hacen una gran diferencia. :-) – Daniel

Cuestiones relacionadas