No script bash:
criamos variável apenas nomeando-a:
abc=ok
ou podemos usar declare
declare abc=ok
qual é a diferença?
e por que o bash faz tantas maneiras de criar uma variável?
bash
shell-script
variable
lovespring
fonte
fonte
declare
torna os NAMEs locais, como nolocal
comando. A-g
opção suprime esse comportamento. Vejahelp declare
.declare
torna possível criar matrizes associativas, números inteiros e variáveis somente leitura. Além disso, ele expande seus argumentos, para que coisas comodeclare $name=1
sejam possíveis.Respostas:
De
help -m declare
:Portanto,
declare
é usado para definir valores e atributos de variáveis .Deixe-me mostrar o uso de dois atributos com um exemplo muito simples:
A partir do exemplo acima, acho que você deve entender o uso da
declare
variável sobre a variável normal! Esse tipo dedeclare
ação é útil em funções, loops com scripts.Visite também Digitando variáveis: declare ou digite
fonte
abc=ok
atribui um valor para a variávelabc
.declare abc
declara uma variável chamadaabc
. Os dois podem ser combinados comodeclare 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 criarabc
um array associativo oudeclare -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ê usedeclare -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:Saída:
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 kshtypeset
, e o bash fornecetypeset
como sinônimo dedeclare
compatibilidade. (Não sei por que o bash não chamou apenastypeset
). Há um terceiro sinônimolocal
. Há tambémexport
o mesmo quedeclare -x
, novamente, para compatibilidade (com todos os shell no estilo Bourne).fonte
export
,local
edeclare
é a mais compatível com outras conchas?export
existe em todas as variantes desh
.local
existe apenas no bash e zsh,declare
apenas no bash.typeset
existe em ksh, bash e zsh.