Quiero exportar correctamente una variable. Para hacerlo tengo que entender varias variaciones en la sintaxis. He visto los siguientes mecanismos para exportar una variable. En este caso estoy usando .bashrc
:
export MY_VARIABLE=$USER/.gradle
--$export MY_VARIABLE="$USER/.gradle"
--Citasexport MY_VARIABLE=USER/.gradle
--Sin $export $MY_VARIABLE=$USER/.gradle
--Todos los $
¿Cuál es el significado del signo $ en estos casos? ¿Por qué unas veces se utiliza y otras no?
¿Necesitamos cotizaciones en los casos en que no hay espacios en la ruta? ¿Qué pasa si la ruta contenida en $USER contiene espacios?
¿Por qué no hay dólares en el lado izquierdo de la exportación?
Respuesta1
Los tokens como export
, declare
y similares utilizan explícitamente nombres de variables como parámetros. $
Generalmente se puede entender que significa "el valor de", por lo que $variable
significa "el valor de variable
". Tome este conjunto de comandos:
foo=bar
bar=baz
export $foo
( echo "$foo" )
Lo que sucederá aquí es que obtendrá una línea de salida en blanco. Esto se debe a que en el export
comando, $foo
en realidad es bar
(el valor de foo
), por lo que el comando real ejecutado es export bar
. Como foo
no se exporta, su valor predeterminado es nulo. Sin embargo, si la última línea fuera:
( echo "$bar" )
Obtendría el resultado de baz
, cuyo valor bar
se había export
agregado a las próximas subcapas.
Generalmente es una muy buena idea utilizar comillas débiles (" "
") alrededortodode sus referencias variables, por razones que incluyen, entre otras, la que usted menciona (es decir, espacios en nombres de archivos y rutas). Por ejemplo, si tuviéramos:
if [ $letter == a ]; then echo "ayyyy"; fi
pero letter
estuvieran vacíos, el shell intentaría ejecutar
if [ == a ]
que es un error de sintaxis, pero entre comillas:
if [ "$letter" == a ];
se convierte
if [ "" == a ];
lo cual es válido.