Variables locales y globales en BASH

bashLa 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.

3 comentarios en “Variables locales y globales en BASH

  1. Hola, si se define una variable dentro de una función sin anteponer «local» esa variable es accesible desde fuera de la función?

Comments are closed.