Comando Bash declare builtin
Nos sistemas operacionais do tipo Unix, declare é um comando interno do shell Bash . Declara variáveis e funções do shell, define seus atributos e exibe seus valores .
-
- Descrição
- Sintaxe
- Exemplos
- Comandos relacionados
- Ajuda do Bash builtins
Descrição
No bash, as variáveis podem ter um valor (como o número 3 ). Opcionalmente, também é possível atribuir variáveis às variáveis (como número inteiro ).
Por exemplo, uma variável ” somente leitura ” ( declarar -r ) não pode ser desabilitada e seu valor e outros atributos não podem ser modificados. Uma variável “matriz indexada” ( declarar -a ) é uma matriz de valores indexados por número, começando em zero. Uma variável “matriz associativa” ( declarar -A ) é uma matriz de pares de valores-chave cujos valores são indexados por uma palavra-chave. (Para mais informações, consulte matrizes no bash ).
Além das variáveis, as funções bash podem receber atributos que afetam seu comportamento. Consulte as opções -f e -F abaixo para obter mais informações.
NotaO comando typeset é um alias para declare . Os dois podem ser usados alternadamente no bash.
Sintaxe
declarar [ -a ] [ -A ] [ -f ] [ -F ] [ -g ] [ -i ] [ -l ] [ -n ] [ -r ] [ -t ] [ -u ] [ -x ] [ -p ] [ nome [ = valor ]] [ nome [ = valor ]] ...
Opções
O comando declare builtin utiliza as seguintes opções gerais:
Opção | Descrição |
---|---|
-f | Todos os nomes são tratados como nomes de funções, não variáveis. |
-F | Ao exibir informações sobre uma função, exiba apenas o nome e os atributos da função. Não exiba o conteúdo da função. |
-g | Quando declare é usado dentro de uma função shell, a opção -g faz com que todas as operações nas variáveis entrem em vigor no escopo global . Se não for usado em uma função shell, -g não terá efeito. |
-p | Quando usado com argumentos de nome , -p exibe as opções e atributos de cada nome de variável e -f ou -F são ignorados (as funções não são descritas).
Quando usado com opções, mas sem nomes, -p exibe os atributos e valores, que correspondem às outras opções especificadas, de todas as variáveis e funções. Quando usado sem opções ou nomes, -p exibe os atributos e valores de todas as variáveis e funções, ou somente funções se -f for especificado. |
As opções restantes, listadas abaixo, fazem com que declarem definir um atributo se a letra da opção for precedida por um traço. Se precedido por um sinal de mais, declare irá desabilitar o atributo.
Opção | Desativar com | Descrição |
---|---|---|
-a | Declare os itens nomeados para serem matrizes indexadas. Este atributo não pode ser desativado. | |
-A | Declare os itens nomeados como matrizes associativas. Este atributo não pode ser desativado. | |
-i | + i | Atribua aos itens nomeados o atributo inteiro . Os valores atribuídos à variável serão restritos a valores inteiros. Se um valor não inteiro for atribuído, um erro será relatado ou o valor 0 (zero) será atribuído.
Se o valor atribuído for uma sequência que representa uma operação aritmética em números inteiros (como ” 5 + 5 “), o resultado da operação será atribuído. Se o resultado da operação não for um número inteiro, o piso inteiro é atribuído (por exemplo, ” 22/7 ” atribui 3 ). Valores de ponto flutuante não podem ser usados e, nesse caso, um erro será relatado. O Bash não suporta operações matemáticas de ponto flutuante. |
-I | + l | Quando um valor é atribuído à variável nomeada, converta todas as letras maiúsculas em minúsculas . Se o atributo maiúscula ( -u ) foi definido anteriormente para a variável, o atributo está desmarcado. |
-n | + n | Atribua a cada nome o atributo nameref , tornando-a uma “referência de nome” para outra variável. A variável referenciada é definida pelo valor do nome . Todas as referências, atribuições e modificações de atributo no nome , exceto aquelas que usam ou alteram o atributo nameref , são executadas na variável referenciada pelo valor do nome . Em outras palavras, faz da variável um ponteiro para outra variável.
O atributo nameref não pode ser aplicado a matrizes. |
-r | + r | Torne os itens nomeados somente leitura. Eles não podem subsequentemente receber valores ou desarmar. |
-t | + t | Atribua a cada item nomeado o atributo de rastreamento . Se o item for uma função, ele herdará os desvios DEBUG e RETURN do shell pai. Se o item for uma variável, o atributo trace não terá efeito. |
-u | + u | Quando a variável nomeada recebe um valor, todas as letras minúsculas são convertidas em maiúsculas. Se o atributo minúsculo ( -l ) foi definido anteriormente para a variável, o atributo está desmarcado. |
-x | + x | Marque itens nomeados para exportação para processos filho, como se o comando de exportação incorporado tivesse sido usado. |
Âmbito lexical
Quando declare é usado dentro de uma função shell, todos os itens nomeados são declarados em um escopo local, a menos que a opção -g seja usada. Esse comportamento é o mesmo que usar o comando interno local .
Status de saída
O status de saída de declare é bem-sucedido (zero), a menos que uma opção inválida seja especificada ou ocorra um erro durante a atribuição de variáveis. Nesse caso, o status é falha (diferente de zero).
Exemplos
Declarando e listando variáveis
declarar -p
Liste todas as variáveis declaradas, seus atributos e seus valores.
declarar myvar
Declare uma variável myvar e não atribua valor a ela. Agora execute o primeiro comando novamente:
declarar -p
Desta vez, observe na saída que myvar está listado após todas as outras variáveis como:
declarar - myvar
O traço duplo é equivalente a “sem opções”. Isso significa que myvar é declarado e não possui atributos. Se tivesse um valor atribuído, o valor seria listado aqui.
myvar = 33
Atribua o valor 33 a myvar .
declarar myvar = 33
O mesmo que o comando acima.
declarar - myvar = 33
O mesmo que os dois comandos acima.
declarar - myvar = "33"
O mesmo que os três comandos acima; esta é a forma correta, incluindo o valor entre aspas duplas. No entanto, qualquer um dos quatro comandos acima tem o mesmo efeito.
Agora, liste todas as variáveis novamente:
declarar -p
Você verá que, desta vez, a saída lista myvar com sua atribuição de valor:
declarar - myvar = "33"
O principal a ser observado aqui é que, quando você executa declare -p , as variáveis são listadas como o comando declare completo, de que você precisaria definir a variável para seus atributos e valor atuais.
Configurando e Desativando Atributos
Os próximos comandos modificam os atributos da variável:
declarar -x myvar
Declare que myvar deve ser exportado para qualquer processo de shell filho. Isso é equivalente ao uso do comando export :
exportar myvar
Agora, liste as declarações de variáveis:
declarar -p
Observe que na saída, o traço duplo (sem opções) foi substituído por -x :
declarar -x myvar = "33"
Para remover o atributo de exportação, use + x :
declarar + x myvar
Após executar o comando acima, o myvar não será mais exportado para processos de subcasca.
Inteiros e avaliação inteira
O Bash permite que você declare uma variável como tendo o atributo inteiro , o que garante que a variável sempre mantenha um valor inteiro. Também permite a avaliação aritmética ao atribuir um valor.
declarar -i myvar
Declare que myvar deve ser tratado como um número inteiro.
myvar = "teste"
A sequência ” test ” é um valor não inteiro, portanto, o valor 0 (zero) é atribuído. Você pode verificar isso se ecoar o valor:
echo $ myvar
0 0
Qualquer valor inteiro positivo ou negativo pode ser atribuído. (O valor máximo possível depende do seu computador, mas é enorme):
myvar = -33; echo $ myvar
-33
Se uma sequência contendo uma operação aritmética for atribuída a uma variável inteira, o resultado da operação será atribuído. Por exemplo:
myvar = "2 * 11"; echo $ myvar
22
O comando acima atribui myvar o valor de 2 vezes 11 .
Se a operação matemática resultar em um número com um ponto decimal, o resultado será arredondado para o próximo número inteiro mais baixo. Por exemplo:
myvar = "33/5"; echo $ myvar
6
O resultado preciso de 33 dividido por 5 ( 33/5 ) é 6,6 , mas o bash o arredonda para o número inteiro 6 .
Se você tentar usar valores decimais como operandos , o bash retornará um erro, informando que o ponto decimal é um operador desconhecido:
myvar = "33,1 / 5"; echo $ myvar
bash: 33.1 / 5: erro de sintaxe: operador aritmético inválido (o token de erro é ".1 / 5")
Para desarmar o atributo inteiro, use a opção + i :
declarar + i myvar
Agora, myvar não tem mais o atributo inteiro . Strings contendo operações matemáticas serão agora atribuídas a myvar literalmente , em vez de avaliadas . Por exemplo:
myvar = "33,1 / 5"; echo $ myvar
33.1 / 5
Matrizes indexadas
Para declarar uma matriz indexada, use -a :
declarar -a myvar
Se myvar já tiver um valor atribuído, esse valor será indexado como o primeiro elemento, numerado zero:
eco $ {myvar [0]}
33.1 / 5
Agora você pode atribuir valores a elementos da matriz myvar usando números inteiros como os índices:
myvar [1] = "Olá"
myvar [2] = "Mundo!"
Os elementos podem ser acessados pelo número do índice usando a seguinte sintaxe:
eco $ {myvar [2]}
Mundo!
Se você usar um número inteiro negativo como índice, o bash contará a partir do último elemento, em vez do primeiro. Para acessar o último elemento, use o índice -1 :
eco $ {myvar [-1]}
Mundo!
Um índice de -2 acessaria o penúltimo elemento da matriz, etc .:
eco $ {myvar [-2]}
Olá
Para exibir todos os elementos em uma matriz, você pode usar um asterisco (” * “) como índice. Elementos individuais são separados por um espaço:
eco $ {myvar [*]}
33.1 / 5 Olá Mundo!
NotaVocê não pode desmarcar o atributo da matriz com + a . O Bash não tem procedimento para converter uma matriz para outro tipo, portanto, ele retornará um erro, mesmo que nenhum valor tenha sido atribuído. Por exemplo:
declarar + um myvar
bash: declare: myvar: não pode destruir variáveis de matriz desta maneira
Verifique se uma variável é declarada
Se você está escrevendo um script bash e precisa verificar se uma variável é declarada, esta é a maneira correta de fazê-lo:
if [-z $ {myvar + x}]; então ecoa "não definido"; else echo "set"; fi
Isso executará a expansão do parâmetro “Atribuir valor alternativo” , que testa se myvar foi definido e se seu valor é nulo . Se myvar estiver desabilitado , ele ecoará ” não definido “. Caso contrário, ele ecoará ” set “. Observe que a letra x pode ser o que você quiser, mas é necessária para que a comparação ocorra.
Comandos relacionados
exportar – Marque variáveis e funções a serem exportadas para processos filho.