miércoles, 1 de febrero de 2017

Variables locales

En los scripts que hemos escrito hasta ahora, todas las variables (incluyendo las constantes) han sido variables globales. Las variables globales siguen existiendo a lo largo del programa. Esto es bueno para muchas cosas, pero, a veces, puede complicar el uso de las funciones de shell. Dentro de las funciones de shell, a menudo es preferible tener variables locales. Las variables locales sólo son accesibles dentro de la función de shell en la que han sido definidas y dejan de existir una vez que la función de shell termina.

Tener variables locales permite al programador usar variables con nombres que pueden existir anteriormente, tanto en el script globalmente como en otras funciones de shell, si tener que preocuparnos por potenciales conflictos de nombres.

Aquí hay un ejemplo de script que demuestra como se definen y usan las variables locales:

#!/bin/bash

# local-vars: script to demonstrate local variables

foo=0 # global variable foo

funct_1 () {

    local foo # variable foo local to funct_1

    foo=1
    echo "funct_1: foo = $foo"
}

funct_2 () {

    local foo # variable foo local to funct_2

    foo=2
    echo "funct_2: foo = $foo"
}

echo "global: foo = $foo"
funct_1
echo "global: foo = $foo"
funct_2
echo "global: foo = $foo"

Como podemos ver, las variables locales se definen precediendo al nombre de la variable con la palabra local. Esto crea una variable que es local para la función de shell en la que se define. Una vez fuera de la función de shell, la variable deja de existir. Cuando ejecutamos este script, vemos los resultados:

[me@linuxbox ~]$ local-vars
global:  foo = 0
funct_1: foo = 1
global:  foo = 0
funct_2: foo = 2
global:  foo = 0

Vemos que la asignación de valores a la variable local foo dentro de ambas funciones de shell no tiene efecto en el valor de foo definido fuera de las funciones.

Esta característica permite que las funciones de shell sean escritas de forma que se mantengan independientes entre sí y del script en el que aparecen. Esto es muy valioso, ya que ayuda a prevenir que una parte del programa interfiera en otra. También permite que las funciones de shell sean escritas de forma que sean portables. Es decir, pueden cortarse y pegarse de un script a otro, según sea necesario.

No hay comentarios:

Publicar un comentario