abc=okasigna un valor a la variable abc. declare abcdeclara 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 declarelo que no es necesario a menos que desee pasar opciones, por ejemplo, declare -A abcpara hacer abcuna matriz asociativa o declare -rpara hacer una variable de solo lectura. Sin embargo, dentro de una función, declarehace 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 -gApara 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 declareincorporado es
El declareincorporado es exclusivo de bash. Está fuertemente inspirado y muy cerca de la typesetconstrucción de ksh , y bash proporciona typesetcomo sinónimo de declarecompatibilidad. (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).
declarehace que los NAME sean locales, como con ellocalcomando. La-gopción suprime este comportamiento. Verhelp declare.