abc=ok
asigna un valor a la variable abc
. declare abc
declara una variable llamada abc
. Los dos se pueden combinar como declare abc=ok
.
En bash, como otros shells, las variables de cadena y matriz no necesitan ser declaradas, por declare
lo que no es necesario a menos que desee pasar opciones, por ejemplo, declare -A abc
para hacer abc
una matriz asociativa o declare -r
para hacer una variable de solo lectura. Sin embargo, dentro de una función, declare
hace una diferencia: hace que la variable sea local a la función, lo que significa que el valor de la variable fuera de la función (si existe) se conserva. (A menos que utilice declare -g
, lo que hace que la variable no sea local; esto es útil cuando se combina con otras opciones, por ejemplo, declare -gA
para crear una matriz asociativa global en una función). Ejemplo:
f () {
declare a
a='a in f'
b='b in f'
echo "From f: a is $a"
echo "From f: b is $b"
}
a='Initial a'
b='Initial b'
f
echo "After f: a is $a"
echo "After f: b is $b"
Salida:
From f: a is a in f
From f: b is b in f
After f: a is Initial a
After f: b is b in f
Otra cosa que puedes hacer con el declare
incorporado es
El declare
incorporado es exclusivo de bash. Está fuertemente inspirado y muy cerca de la typeset
construcción de ksh , y bash proporciona typeset
como sinónimo de declare
compatibilidad. (No sé por qué bash no solo lo llamó typeset
). Hay una tercera sinonimo, local
. También hay export
, que es lo mismo que declare -x
, de nuevo por compatibilidad (con cada shell de estilo Bourne).
declare
hace que los NAME sean locales, como con ellocal
comando. La-g
opción suprime este comportamiento. Verhelp declare
.