bash -c "v = valor; echo $ v "no muestra nada

Respuestas:

18

Aquí hay dos proyectiles involucrados:

  • El shell de llamada, el shell interactivo desde el que está ejecutando esto

  • El shell sin inicio de sesión, no interactivo, generado por bash -c

Ahora, el problema es que, entre comillas dobles, las variables se expanden a sus respectivos valores, esto es cierto para cualquier shell.

Entonces, como ha usado comillas dobles, la expansión variable $v, en realidad está teniendo lugar en el shell de llamada, no en el shell llamado. Pero la declaración, v=valuese lleva a cabo en el llamado shell no interactivo.

Entonces, en total, tiene la variable definida en el shell llamado y expandida (de antemano) en el shell de llamada. Como la variable de valor no está establecida en el shell de llamada, por lo tanto, no obtiene nada en la salida.

Ahora, para que la definición variable y la expansión tengan lugar en el shell generado, use comillas simples o escape $:

$ bash -c "v=value; echo $v"

$ bash -c 'v=value; echo $v'
value

$ bash -c "v=value; echo \$v"
value
heemayl
fuente
1

Con comillas dobles $vse sustituye por el shell interactivo. Use comillas simples:

$ bash -c 'v=value;echo $v'
value

fuente