abc=okatribui um valor para a variável abc. declare abcdeclara 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 declarenão são necessárias, a menos que você deseje passar opções, por exemplo, declare -A abcpara criar abcum array associativo ou declare -rpara tornar uma variável somente leitura. No entanto, dentro de uma função, declarefaz 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 -gApara 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 declarebuilt-in é
O declarebuiltin é exclusivo para o bash. É fortemente inspirado e muito próximo ao built-in do ksh typeset, e o bash fornece typesetcomo sinônimo de declarecompatibilidade. (Não sei por que o bash não chamou apenas typeset). Há um terceiro sinônimo local. Há também exporto mesmo que declare -x, novamente, para compatibilidade (com todos os shell no estilo Bourne).
declaretorna os NAMEs locais, como nolocalcomando. A-gopção suprime esse comportamento. Vejahelp declare.