La shell BASH nos permite utilizar dos tipos de variables, las locales y globales (environment variables). Básicamente, la diferencia entre ambas es que la variable local tiene valor únicamente dentro de nuestra shell, es decir de nuestra sesión. Ningún otro usuario tiene acceso a ella. Por el contrario, las variables globales se establecen para todas las shells., hay que aclarar este último concepto, las variables globales se heredarán desde esta shell a las que se creen a partir de ella (sub-shell o proceso hijo «child» ).
Crear variables locales en bash
Crear una variable local es extremadamente sencillo. En bash por estándar el nombre que asignemos a la variable irá en mayúscula, seguido de un «=» y el valor de la variable, ejemplo:
$ VAR1=prueba_variable_1
La variable ya puede ser usada en cualquier momento desde nuestra shell. A la hora de usar la variable una vez declarada le anteponemos el $, pero no cuando la creamos, ejemplo:
$ echo $VAR1 prueba_variable_1
En todo momento podemos listar las variables establecidas en la shell, para ello ejecutamos el comando set
:
$ set BASH=/bin/bash BASH_ARGC=() BASH_ARGV=() BASH_COMPLETION=/etc/bash_completion BASH_COMPLETION_DIR=/etc/bash_completion.d BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="3" [1]="2" [2]="48" [3]="1" [4]="release" [5]="i486-pc-linux -gnu") ... ... ...
El listado es muy amplio, así que acotamos la búsqueda a la variable que nos interesa:
$ set | grep ^VAR1 VAR1=prueba_variable_1
Para eliminar la variable utilizamos unset
seguido del nombre asignado a la variable:
$ unset VAR1
Crear variables de entorno o globales en bash
La sintaxis es distinta, para crear una variable de entorno usaremos export
seguido de la variable:
$ export VAR2=prueba_variable_2
Al igual que con las variables locales, podemos utilizarla instantáneamente, además en este caso la variable existirá también si abrimos nuevas shells (con el comando bash por ejemplo), mientras que en las variables locales se perdería:
$ echo $VAR2 prueba_variable_2 $ bash $ echo $VAR2 prueba_variable_2
A la hora de listar las variables de entorno tenemos tres posibilidades, usar set
como con las locales o export
o env
:
$ env | grep ^VAR2 VAR2=prueba_variable_2 $ export | grep VAR2 declare -x VAR2="prueba_variable_2" $ set | grep ^VAR2 VAR2=prueba_variable_2
Para eliminar la variable hacemos igual que en las locales, unset:
$ unset $VAR2
Normalmente las variables de entorno se definen en el momento que se hace login, a través del fichero .bashrc por ejemplo. Algunas variables de entorno predefinidas en bash son DISPLAY, HOME, PATH, PS1, PWD, SHELL o TERM.
Gracias. Así aguanta leer mas explicaciones :D
¡Muy bueno!
También he encontrado este post que explica como hacerlas permanentes:
http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Hola, si se define una variable dentro de una función sin anteponer «local» esa variable es accesible desde fuera de la función?