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

1

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

$ bash -c 'v=value;echo $v'
value
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.