Respuestas:
$BASH
es una variable local que es válida solo en el shell actual (bash).
Variables de entorno como $SHELL
son válidas en todo el sistema. En un shell Bash actual, $BASH
apunta a la ruta de ejecución de bash , mientras que $SHELL
apunta al shell definido como predeterminado (que puede ser del mismo valor).
Para obtener una explicación de las variables de entorno, consulte Variables de entorno en la Ayuda de Ubuntu.
Una variable de entorno está disponible globalmente, en un programa y sus programas secundarios. Una variable de shell solo está disponible en el shell actual. Para que una variable de shell esté disponible como una variable de entorno, use export VARNAME
(sin dólar $
).
Ejemplos de aclaración:
$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR
Otra forma de definir una variable de entorno:
$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
export
no establece necesariamente una variable de entorno. stackoverflow.com/questions/7411455/…
export
establece una variable de entorno para procesos secundarios. La publicación que ha vinculado no contradice esta respuesta, ¿podría aclarar por qué cree que está mal?
export
absolutamente establece una variable de entorno
Hay una diferencia. Las variables de Shell y las variables de entorno lo explicarán mejor que yo, pero aquí hay un extracto:
Si se realiza un cambio en una variable de shell, se debe "exportar" explícitamente a la variable de entorno correspondiente para que cualquier subproceso bifurcado pueda ver el cambio. Recuerde que las variables de shell son locales al shell en el que se definieron.
Variable de shell: Corto plazo, Aplicado solo a la instancia actual del shell, No aplicable en todo el sistema
Variable ambiental: uso a largo plazo, sistema válido en todo el mundo, permitido globalmente
Por convención, las variables de Shell tienen su nombre en minúsculas mientras Envn. Las variables se escriben en mayúsculas
Para responder a esta pregunta, primero intente comprender el alcance de una variable.
Cuando crea una nueva variable como SOME_ENV_VARIABLE="testing.txt"
si SHELL scope
estuviera en el , eso significa que se puede acceder por esa instancia del shell donde el usuario está conectado. Cuando la instancia cambia, por ejemplo, abre un nuevo terminal o cambia el shell (por ejemplo, usted cambie a csh
) no puede acceder a esa variable.
Cuando exporta esa variable como export SOME_ENV_VARIABLE
esa variable ahora está disponible en el ámbito del entorno, eso significa que en ese caso si cambia el shell aún puede acceder a esa variable. Tratemos de entender con el siguiente ejemplo:
[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.
Analogía: supongamos que tiene un apartamento de dos habitaciones y lo está compartiendo con otro compañero de cuarto. Cualquiera puede acceder al área común, pero no a sus habitaciones, la variable de entorno es como el área común y la variable de concha es como la habitación, si desea algo en el área común, cualquiera puede acceder a ella, pero si la mantiene en su habitación, solo puede ser accedido por usted
Recuerde que si abre un nuevo terminal, no podrá acceder a ninguna de las variables porque está cambiando esa instancia . Para eso, debe agregar sus variables en cualquiera .profile
o .bashrc
(si está usando bash).