O que são dicionários Bash no Linux e como usá-los? 1

O que são dicionários Bash no Linux e como usá-los?

Os dicionários Bash fornecem mapas hash e matrizes associativas em scripts de shell do Linux. Mostraremos como usar essas estruturas de dados poderosas e úteis em seus próprios scripts de shell do Linux.

Uma rosa por qualquer outro nome

O que é o Bash Shell e por que ele é tão importante para o Linux?

RELACIONADOO que é o Bash Shell e por que ele é tão importante para o Linux?

O nome formal dos dicionários é matrizes associativas. Eles também são chamados de tabelas de hash e mapas de hash. Eles são uma estrutura de dados que funciona de forma semelhante a uma matriz regular, mas com uma diferença significativa.

Uma matriz é uma coleção de valores de dados mantidos em uma estrutura de dados. Para acessar qualquer um dos valores de dados, que são conhecidos como elementos da matriz, você precisa saber sua posição na matriz. A posição de um elemento da matriz na matriz é conhecida como seu índice, portanto, esses tipos de matrizes são conhecidos como matrizes indexadas. Eles são o tipo de matriz mais comumente usado.

No entanto, eles têm uma desvantagem. Como você acessa um elemento de array se não sabe sua posição na lista? Você precisa percorrer todos os elementos do array, testando para ver se o valor naquele local é aquele que você está procurando.

Matrizes associativas superam esse problema. Eles não usam números inteiros para identificar exclusivamente os elementos da matriz. Eles usam palavras exclusivas conhecidas como palavras-chave. Você pode recuperar o valor de um elemento da matriz usando sua palavra-chave, independentemente de onde ele esteja posicionado na matriz. Com uma matriz indexada, os números inteiros que representam as posições dentro da matriz estão em ordem crescente. As palavras-chave em uma matriz associativa podem estar em qualquer ordem.

Você pode pesquisar um valor em uma matriz associativa pesquisando com sua palavra-chave. Pesquisar uma palavra e recuperar seu valor associado simula pesquisar uma palavra em um dicionário e encontrar seu significado. É por isso que as matrizes associativas são conhecidas como dicionários.

Bash 4.0 ou superior

Matrizes associativas são suportadas no shell Bash versão 4.0 ou superior. Se você estiver usando uma distribuição Linux atual, não terá problemas. Para verificar sua versão do Bash, use este comando:

bash --version

O que são dicionários Bash no Linux e como usá-los? 2

A máquina usada para pesquisar este artigo tem o Bash 5.1.4 instalado, então estamos prontos.

Princípios básicos

Para criar um array associativo na linha de comando do terminal ou em um script, usamos o comando Bash declare. O -A A opção (associativa) diz ao Bash que esta será uma matriz associativa e não uma matriz indexada.

declare -A acronyms

O que são dicionários Bash no Linux e como usá-los? 3

Isso cria uma matriz associativa chamada “acrônimos”.

Para colocar alguns dados em nosso array, precisamos fornecer palavras-chave e valores. Podemos fazer isso usando este formato:

array-name[key]=Value

Vamos adicionar alguns elementos do array:

acronyms[ACK]=Acknowledgement
acronyms[BGP]="Border Gateway Protocol"
acronyms[CIDR]="Classless Inter-Domain Routing"
acronyms[DHCP]="Dynamic Host Configuration Protocol"
acronyms[EOF]="End of Frame"

O que são dicionários Bash no Linux e como usá-los? 4

Esses comandos definem cinco elementos do array. Observe que os valores são colocados entre aspas se houver espaços no valor. Nossas palavras-chave foram inseridas em ordem alfabética, mas podem ser inseridas na ordem que você desejar. As palavras-chave devem ser exclusivas. Se você tentar criar duas entradas com a mesma palavra-chave, o segundo valor inserido substituirá o primeiro. Você ainda terá apenas uma entrada com essa palavra-chave e ela será associada ao segundo valor adicionado.

Para recuperar valores da matriz, usamos comandos neste formato:

${array-name[key]}

Podemos usar echo para enviar a saída para a janela do terminal:

echo ${acronyms[ACK]}
echo ${acronyms[DHCP]}

O que são dicionários Bash no Linux e como usá-los? 5

Usando Loops

Os arrays podem ser usados ​​em loops muito bem. Matrizes associativas não são exceção. Os loops fornecem maneiras eficientes de invocar uma sequência de ações sem seções repetitivas de código. Antes de examinarmos os loops, há uma maneira eficiente de declarar matrizes.

Criamos os arrays usando o declare comando (o mesmo -A como antes), mas fornecemos as palavras-chave e os valores como uma lista na linha de comando.

declare -A countries=( [ALB]=Albania [BHR]=Bahrain [CMR]=Cameroon [DNK]=Denmark [EGY]=Egypt )

O nome da matriz é “países” e está conectado à lista de valores por um sinal de igual ” =. ” A lista de valores está entre parênteses “()”E cada palavra-chave é colocada entre colchetes“[]“. Observe que não há vírgulas separando os valores. Se você tiver uma string de valor que contenha espaços, será necessário colocá-la entre aspas.

O que são dicionários Bash no Linux e como usá-los? 6

Para fazer uma matriz associativa retornar uma palavra-chave em vez do valor, adicione um ponto de exclamação “!”Na frente do nome da matriz. O símbolo arroba “@”Pode ser usado como um caractere curinga, significando todos os elementos da matriz.

Esta for loop listará todas as palavras-chave:

for key in "${!countries[@]}"; do echo $key; done

O que são dicionários Bash no Linux e como usá-los? 7

Observe que as palavras-chave não estão necessariamente listadas na ordem em que foram criadas, mas isso não importa. As matrizes associativas não dependem de um índice ordenado.

Também podemos usar a expansão do parâmetro para listar todas as palavras-chave. Eles serão listados em uma linha, não um por linha.

echo "${!countries[@]}"
echo "${!acronyms[@]}"

O que são dicionários Bash no Linux e como usá-los? 8

Podemos aumentar nosso for loop para imprimir as palavras-chave e valores ao mesmo tempo.

for key in "${!acronyms[@]}"; do echo "$key - ${acronyms[$key]}"; done

O que são dicionários Bash no Linux e como usá-los? 9

Se quisermos saber quantos elementos existem nas matrizes, podemos usar um hash “#” na frente do nome da matriz em vez de um ponto de exclamação.

echo "${!countries[@]}"
echo "${!acronyms[@]}"

O que são dicionários Bash no Linux e como usá-los? 10

Verificando se existe um elemento Array

Se você pesquisar uma palavra-chave, mas não houver nenhum elemento de matriz, o valor de retorno será uma string vazia. Às vezes, é útil ter um indicador diferente para a presença ou ausência de um elemento da matriz.

Podemos verificar a presença de um elemento de matriz usando o “+_”Operador. Observe que isso vem depois da palavra-chave, não na frente do nome do array como os operadores anteriores que vimos.

if [ ${acronyms[EOF]+_} ]; then echo "Found"; else echo "Not found"; fi
if [ ${acronyms[FTP]+_} ]; then echo "Found"; else echo "Not found"; fi

O que são dicionários Bash no Linux e como usá-los? 11

O elemento do array com a palavra-chave “EOF” é encontrado no array, mas o elemento do array com a palavra-chave “FTP” não é.

Adicionando Elementos de Matriz

Adicionar novos elementos a uma matriz associativa é fácil. Ao contrário de algumas linguagens de programação, você não precisa definir o tamanho do seu array ao declará-lo. Você pode continuar adicionando novos elementos sem atingir um limite superior predefinido.

Para adicionar um novo elemento ao array, usamos o método “+=”Operador.

countries+=( [FJI]=Fiji )
echo "$(#countries[@]}"
echo ${countries[FJI]}

O que são dicionários Bash no Linux e como usá-los? 12

O número de elementos na matriz agora é seis e a pesquisa pela nova palavra-chave localiza o elemento da matriz e retorna seu valor.

Removendo Array Elements e Arrays

O unset comando é usado para remover elementos da matriz. Se a palavra-chave contiver espaços, coloque-a entre aspas.

unset acronyms[EOF]
if [ ${acronyms[EOF]+_} ]; then echo "Found"; else echo "Not found"; fi

O que são dicionários Bash no Linux e como usá-los? 13

Para remover toda a matriz, use unset com o nome da matriz.

unset countries

O que são dicionários Bash no Linux e como usá-los? 14

Usando variáveis ​​com matrizes

Usar variáveis ​​com matrizes associativas é direto. Neste exemplo, definiremos uma chave variável para a string “EOF”. Usaremos a variável quando adicionarmos um novo elemento de array ao array. Na verdade, estamos substituindo o elemento da matriz que excluímos anteriormente.

Recuperaremos o novo elemento da matriz chamando-o com a nova palavra-chave e também, usando a variável. Se a palavra-chave contiver espaços, você precisará colocar o nome da variável entre aspas.

key=EOF
acronyms[$key]="End of Frame"
echo ${acronyms[EOF]}
echo ${acronyms[$key]}

O que são dicionários Bash no Linux e como usá-los? 15

Seja criativo

Nossos exemplos foram coleções de informações em que cada elemento do array é independente de todos os outros, como um dicionário. Cada um é uma definição única. Mas as matrizes associativas podem facilmente conter uma variedade de peças de informação, todas relacionadas a uma coisa, como as especificações de diferentes peças de hardware de computador:

declare -A specification
specification[CPU]="Dual Core AMD Ryzen 5 3600"
specification[Speed]="3600 MHz"
specification[Kernel]="5.11.0-17-generic x86_64"
specification[Mem]="1978.5 MiB"
specification[Storage]="32 GiB"
specification[Shell]="Bash"
echo ${specification[CPU]}

O que são dicionários Bash no Linux e como usá-los? 16

Escrever com eficiência em uma linguagem significa conhecer os mecanismos e estruturas que ela oferece e selecionar o mais adequado para o problema que você está tentando resolver. As matrizes associativas oferecem uma maneira fácil de usar para armazenar dados que você pode pesquisar por nome, como um dicionário.

Apoie o nosso trabalho ❤️

Se você gostou deste artigo, considere deixar uma gorjeta para nos ajudar a continuar publicando conteúdo de qualidade.

Pagamento seguro no PayPal
Moyens I/O Staff motivou você, dando conselhos sobre tecnologia, desenvolvimento pessoal, estilo de vida e estratégias que irão ajudá-lo.