Variables de shell frente a variables de entorno
MY_HOME="/home/my_user"
establece la variable de shell llamada MY_HOME
. Los shells son lenguajes de programación y tienen variables (también llamadas parámetros). Después de esta asignación, puede usar el valor de la variable, por ejemplo, con echo "$MY_HOME"
.
Las variables de shell son un concepto de shell interno. Cuando esa instancia de shell finaliza, MY_HOME
se olvida. Lo que cada programa sabe y transmite a sus hijos son las variables de entorno .
Dentro del shell, las variables de entorno y las variables de shell funcionan de manera muy similar. Lo que realmente sucede es que todas las variables de entorno que el shell hereda de su padre se convierten en variables de shell. Por el contrario, una variable de shell que se define en un script de shell se convertirá en una variable de entorno si la exporta .
export MY_HOME="/home/my_user"
Más detalles que puedes omitir en la primera lectura
La razón por la cual las variables de shell no se convierten automáticamente en variables de entorno es, en parte, que un script puede usar accidentalmente un nombre de variable que es significativo para un programa que lanza, y en parte solo histórico.
Se requieren algunos shells muy antiguos export
cada vez que se cambia el nombre de una variable, pero todos los shells modernos realizan un seguimiento de las asignaciones de las variables de entorno, de modo que el siguiente fragmento haga eco bar
:
myvar=foo
export myvar
myvar=bar
env | grep '^myvar='
Además, algunos shells muy antiguos requerían comandos separados para myvar=foo
y export myvar
, pero todos los shells modernos lo entienden export myvar=foo
.
Puede ejecutar set -a
para hacer que todas las asignaciones de variables de shell exporten automáticamente la variable, por lo que myvar=foo
es equivalente a export myvar=foo
si ejecutó set -a
primero en ese shell.
En la cita
Las citas son mayormente ortogonales. Si el valor que está asignando a la variable no contiene ningún carácter que sea especial para el shell, no necesita comillas. Si hay caracteres especiales, debe protegerlos con comillas simples o comillas dobles o barras invertidas o una combinación de ellas. Esto se aplica tanto a la myvar=value
sintaxis simple como a la export
utilidad.
Hay una diferencia entre la sintaxis de asignación y la export
sintaxis. El shell expande aún más los resultados de las sustituciones variables $foo
, realizando división de campo (palabra) y expansión de nombre de ruta (globbing) . Esto significa que si el valor de myvar
es hello *
, entonces echo $myvar
imprime hello
seguido de un solo espacio seguido de la lista de archivos en el directorio actual. Esto casi nunca es deseable, por lo tanto, el principio general que utilice siempre comillas dobles sustituciones de variables (a menos que usted sabe que necesita nombre de ruta de expansión o la división de campos): echo "$myvar"
. En el caso de una asignación simple, othervar=$myvar
de hecho, fiable copia el valor de myvar
aothervar
, porque el bloqueo y la división de palabras se inhiben en las asignaciones (porque crean varias palabras, pero se espera una sola palabra). export
Sin embargo, esta dispensación no se aplica a . Entonces, si desea recordar una regla simple, use siempre comillas dobles alrededor de sustituciones variables.