abc=ok
atribui um valor para a variável abc
. declare abc
declara uma variável chamada abc
. Os dois podem ser combinados como declare abc=ok
.
No bash, como outros shells, as variáveis de string e array não precisam ser declaradas, portanto declare
não são necessárias, a menos que você deseje passar opções, por exemplo, declare -A abc
para criar abc
um array associativo ou declare -r
para tornar uma variável somente leitura. No entanto, dentro de uma função, declare
faz a diferença: faz com que a variável seja local para a função, o que significa que o valor da variável fora da função (se houver) é preservado. (A menos que você use declare -g
, o que torna a variável não local; isso é útil quando combinado com outras opções, por exemplo, declare -gA
para criar uma matriz associativa global em uma função.) Exemplo:
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"
Saída:
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
Outra coisa que você pode fazer com o declare
built-in é
O declare
builtin é exclusivo para o bash. É fortemente inspirado e muito próximo ao built-in do ksh typeset
, e o bash fornece typeset
como sinônimo de declare
compatibilidade. (Não sei por que o bash não chamou apenas typeset
). Há um terceiro sinônimo local
. Há também export
o mesmo que declare -x
, novamente, para compatibilidade (com todos os shell no estilo Bourne).
declare
torna os NAMEs locais, como nolocal
comando. A-g
opção suprime esse comportamento. Vejahelp declare
.