Bash declara comando embutido


0

[*]

Bash declara comando embutido

declarar comando

Em sistemas operacionais do tipo Unix, declare é um comando embutido do shell Bash. Ele declara funções e variáveis ​​de 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, as variáveis ​​também podem ter atributos atribuídos (como inteiro).

Por exemplo, uma variável “somente leitura” (declara -r) não pode ser removida e seu valor e outros atributos não podem ser modificados. Uma variável de “matriz indexada” (declare -a) é uma matriz de valores indexados por número, começando em zero. Uma variável de “matriz associativa” (declara -A) é uma matriz de pares de valores-chave cujos valores são indexados por uma palavra-chave. (Para obter mais informações, consulte arrays 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.

Observação

O comando typeset é um apelido para declare. Os dois podem ser usados ​​alternadamente no bash.

Sintaxe

declare [-a] [-A] [-f] [-F] [-g] [-i] [-l] [-n] [-r]
        [-t] [-u] [-x] [-p] [name[=value]] [name[=value]] ...

Opções

O comando declare builtin assume 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 em uma função shell, a opção -g faz com que todas as operações nas variáveis ​​tenham efeito 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 apenas funções se -f for especificado.

As opções restantes, listadas abaixo, fazem com que declare definir um atributo se a letra da opção for precedida por um travessão. Se precedido por um sinal de mais, declare cancelará a definição do atributo.

Opção Não definido com Descrição
-uma Declare os itens nomeados como matrizes indexadas. Este atributo não pode ser cancelado.
-UMA Declare os itens nomeados como matrizes associativas. Este atributo não pode ser cancelado.
-eu + i Dê 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 string que representa uma operação aritmética em números inteiros (como “5 + 5”), o resultado da operação é atribuído. Se o resultado da operação não for um inteiro, o piso inteiro é atribuído (por exemplo, “22/7” atribui 3). Os valores de ponto flutuante não podem ser usados ​​e, se forem, um erro será relatado. O Bash não oferece suporte a operações matemáticas de ponto flutuante.

-eu + l Quando um valor é atribuído à variável nomeada, converta todas as letras maiúsculas em minúsculas. Se o atributo maiúsculo (-u) foi definido anteriormente para a variável, o atributo não é definido.
-n + n Dê a cada nome o atributo nameref, tornando-o uma “referência de nome” para outra variável. A variável referenciada é definida pelo valor de nome. Todas as referências, atribuições e modificações de atributos de nome, exceto aquelas que usam ou alteram o atributo nameref, são realizadas na variável referenciada pelo valor de nome. Em outras palavras, torna a 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 ser atribuídos posteriormente a valores ou não configurados.
-t + t Dê a cada item nomeado o atributo trace. Se o item for uma função, ele herdará as armadilhas DEBUG e RETURN do shell pai. Se o item for uma variável, o atributo trace não tem efeito.
-você + vc Quando um valor é atribuído à variável nomeada, 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 não é definido.
-x + x Marque os itens nomeados para exportar para processos filho, como se o comando export embutido 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 declarar é sucesso (zero), a menos que uma opção inválida seja especificada ou ocorra um erro, caso em que o status é falha (diferente de zero).

Exemplos

Declarando e listando variáveis

declare -p

Liste todas as variáveis ​​declaradas, seus atributos e seus valores.

declare myvar

Declare uma variável, myvar, e não atribua nenhum valor a ela. Agora execute o primeiro comando novamente:

declare -p

Desta vez, observe na saída que myvar está listado após todas as outras variáveis ​​como:

declare -- myvar

O traço duplo é equivalente a “sem opções”. Isso significa que myvar é declarado e não tem atributos. Se tivesse um valor atribuído, o valor seria listado aqui.

myvar=33

Atribua o valor 33 a myvar.

declare myvar=33

Igual ao comando acima.

declare -- myvar=33

Igual aos dois comandos acima.

declare -- myvar="33"

Igual aos três comandos acima; esta é a forma adequada, 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:

declare -p

Você verá que, desta vez, a saída lista myvar com sua atribuição de valor:

declare -- myvar="33"

O principal ponto a ser observado aqui é que, quando você executa declare -p, as variáveis ​​são listadas como o comando declare completo e você precisa definir a variável com seus atributos e valor atuais.

Configurando e desconfigurando atributos

Os próximos comandos modificam os atributos da variável:

declare -x myvar

Declare que myvar deve ser exportado para qualquer processo shell filho. Isso é o equivalente a usar o comando export:

export myvar

Agora, liste as declarações de variáveis:

declare -p

Observe que na saída, o traço duplo (sem opções) foi substituído por -x:

declare -x myvar="33"

Para remover o atributo de exportação, use + x em vez disso:

declare +x myvar

Depois de executar o comando acima, myvar não será mais exportado para processos de subshell.

Inteiros e avaliação de inteiros

O Bash permite que você declare que uma variável tem o atributo inteiro, o que garante que a variável sempre contenha um valor inteiro. Também permite a avaliação aritmética ao atribuir um valor.

declare -i myvar

Declare que myvar deve ser tratado como um inteiro.

myvar="test"

A string “teste” é um valor não inteiro, então o valor 0 (zero) é atribuído em seu lugar. Você pode verificar isso se ecoar o valor:

echo $myvar
0

Qualquer valor inteiro positivo ou negativo pode ser atribuído, no entanto. (O valor máximo possível depende do seu computador, mas é enorme):

myvar=-33; echo $myvar
-33

Se uma string 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 a myvar o valor de 2 vezes 11.

Se a operação matemática resultar em um número com uma vírgula decimal, o resultado será arredondado para o próximo inteiro mais baixo. Por exemplo:

myvar="33/5"; echo $myvar
6

O resultado preciso de 33 dividido por 5 (33/5) é 6,6, mas bash o arredonda para o inteiro 6.

Se você tentar usar valores decimais como operandos, bash retornará um erro, informando que o ponto decimal é um operador desconhecido:

myvar="33.1/5"; echo $myvar
bash: 33.1/5: syntax error: invalid arithmetic operator (error token is ".1/5")

Para remover o atributo inteiro, use a opção + i:

declare +i myvar

Agora, myvar não tem mais o atributo integer. Strings contendo operações matemáticas são atribuídas literalmente a myvar, ao invés de avaliadas. Por exemplo:

myvar="33.1/5"; echo $myvar
33.1/5

Matrizes indexadas

Para declarar uma matriz indexada, use -a:

declare -a myvar

Se myvar já tinha um valor atribuído, esse valor é indexado como o primeiro elemento, numerado como zero:

echo ${myvar[0]}
33.1/5

Agora você pode atribuir valores a elementos da matriz myvar usando números inteiros como índices:

myvar[1]="Hello"
myvar[2]="World!"

Os elementos podem ser acessados ​​por número de índice usando a seguinte sintaxe:

echo ${myvar[2]}
World!

Se você usar um número inteiro negativo como índice, o bash conta a partir do último elemento, ao invés do primeiro. Para acessar o último elemento, use o índice -1:

echo ${myvar[-1]}
World!

Um índice de -2 acessaria o penúltimo elemento da matriz, etc .:

echo ${myvar[-2]}
Hello

Para exibir todos os elementos em uma matriz, você pode usar um asterisco (“*”) como o índice. Os elementos individuais são separados por um espaço:

echo ${myvar[*]}

33.1/5 Hello World!
Observação

Você não pode remover a definição do atributo array com + a. O Bash não tem procedimento para converter um array em outro tipo, então ele retorna um erro, mesmo se nenhum valor tiver sido atribuído. Por exemplo:

declare +a myvar
bash: declare: myvar: cannot destroy array variables in this way

Verifique se uma variável está declarada

Se você estiver escrevendo um script bash e precisar verificar se uma variável foi declarada, esta é a maneira correta de fazer isso:

if [ -z ${myvar+x} ]; then echo "not set"; else echo "set"; fi

Este script executa a expansão do parâmetro “Atribuir valor alternativo”, que testa se myvar foi definido e se seu valor é nulo. Se myvar não estiver definido, ele exibirá “não definido”. Caso contrário, ele ecoará “set”. Observe que a letra x pode ser qualquer coisa que você desejar, mas é necessária para que a comparação ocorra.

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


Like it? Share with your friends!

0
Rubem Rego

0 Comments

Your email address will not be published. Required fields are marked *