fbpx

Comandos Linux – Comando declare

Comando Bash declare builtin

Atualizado: 05/04/2019 por Computer Hope

comando declarar

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

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çãoDescrição
-fTodos os nomes são tratados como nomes de funções, não variáveis.
-FAo 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.
-gQuando 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.
-pQuando 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çãoDesativar comDescrição
-aDeclare os itens nomeados para serem matrizes indexadas. Este atributo não pode ser desativado.
-ADeclare os itens nomeados como matrizes associativas. Este atributo não pode ser desativado.
-i+ iAtribua 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+ lQuando 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+ nAtribua 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+ rTorne os itens nomeados somente leitura. Eles não podem subsequentemente receber valores ou desarmar.
-t+ tAtribua 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+ uQuando 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+ xMarque 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.

exportar – Marque variáveis ​​e funções a serem exportadas para processos filho.

18 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900

Copyright © Linux Force Security  - Desde 2011.