Entendendo as matrizes associativas no Linux Bash com exemplos

Entendendo as matrizes associativas no Linux Bash com exemplos
Matrizes associativas são um tipo de dados abstrato que pode ser considerado como dicionários ou mapas. Como eles diferem de outras matrizes é que eles mantêm os pares de valor-chave onde as chaves podem ser strings arbitrários e definidos pelo usuário, em vez dos números usuais de índice. Matrizes associados têm duas propriedades principais:
  • Cada chave na matriz só pode aparecer uma vez. Você pode pensar nisso como um ID único para um usuário em uma lista.
  • Um valor pode aparecer mais de uma vez em uma matriz. Por exemplo, duas pessoas em uma lista podem ter o mesmo nome, mas precisam ter IDs de usuário diferentes.

Neste artigo, explicaremos como você pode declarar e inicializar matrizes associativas no Linux Bash. Vamos elaborar ainda mais o poder das matrizes associativas com a ajuda de vários exemplos.

Executamos os exemplos mencionados neste artigo em um sistema Debian 10 Buster. No entanto, você pode facilmente se replicar em quase todas as distribuições Linux.

Verificando os pré-requisitos

Para usar matrizes associativas no Linux Bash, sua versão GNU Bash deve ser igual ou superior à versão 4. Abra seu terminal Linux acessando -o através da pesquisa de lançador de aplicativos. Em seguida, insira o seguinte comando para verificar sua versão instalada do Bash:

$ Bash -Versão

Minha versão atual da festa é 5.0.3 Então estou pronto para ir. Caso sua versão Bash seja menor que 4, você pode atualizar a Bash executando o seguinte comando como sudo:

$ sudo apt-get install --only upgrade

Declarando uma matriz associativa e inicialize

Declarar uma matriz associativa é bastante simples em Bash e pode ser feita através do comando declarar:

$ declarar -a "nome do array"

Em nosso exemplo, declararemos uma variável de matriz denominada sampleArray1 da seguinte forma:

$ declarar -Um sampleArray1

O próximo passo é inicializar os valores necessários para sua matriz. Em nosso exemplo, queremos ter uma matriz onde os valores são alguns nomes de países e as chaves são as abreviações de nome do país relevante. Aqui, alimentaremos os valores da matriz, um a um da seguinte:

$ Arrayname [key] = valor

Exemplo:

$ sampleArray1 [chn] = China
$ sampleArray1 [jpn] = Japão
$ sampleArray1 [Kor] = Coréia
$ sampleArray1 [twn] = taiwan
$ sampleArray1 [th] = Tailândia

Uma alternativa rápida é declarar e inicializar uma matriz em um único comando bash da seguinte maneira:

$ declara -a arrayname = ([key1] = value1 [key2] = value2 [key3] = value3… . )

Aqui está como podemos declarar e inicializar nossa matriz mencionada, alternativamente, como segue:

$ declara -a sampleArray1 = ([chn] = China [jpn] = Japão [Kor] = Coréia [TWN] = Taiwan
[TH] = Tailândia)

Agora, apresentaremos alguns exemplos que elaborarão o que você pode fazer com matrizes associativas em Bash:

Exemplo1: Acessando as teclas e valores da matriz

Neste exemplo, explicaremos como você pode:

  • Imprima um valor contra uma chave
  • Imprima todas as teclas de matriz de uma só vez
  • Imprima todos os valores da matriz de uma só vez

E,

  • Imprima todos os pares de valor-chave de uma só vez

Imprimir

Você pode Imprima um valor contra uma chave Usando a seguinte sintaxe de comando:

$ echo $ ArrayName [KeyName]

Aqui está como podemos acessar o nome completo de um país, fornecendo o nome da abreviação do país, do nosso samplearray1:

$ echo $ sampleArray1 [chn]
$ echo $ sampleArray1 [twn]

Se você estiver interessado em imprimindo todas as chaves De sua matriz associativa, você pode fazer isso usando a seguinte sintaxe:

$ para chave em "$ !ArrayName [@] "; do eco $ key; feito

O comando a seguir imprimirá todos os nomes do país abreviações do meu sampleArray1 por

usando um loop:

$ para chave em "$ !sampleArray1 [@] "; do eco $ key; feito

Outra alternativa para imprimir todas as chaves da matriz é usando a expansão dos parâmetros. O comando a seguir imprimirá todas as teclas na mesma linha:

$ echo "$ !sampleArray1 [@] "

Se você estiver interessado em imprimindo todos os valores da matriz de uma só vez, Você pode fazer isso usando o loop for da seguinte forma:

$ para val em "$ ArrayName [@]"; eco $ val; feito

O comando a seguir imprimirá todos os nomes completos dos países armazenados no meu samplearray1:

$ para val em "$ sampleArray1 [@]"; eco $ val; feito

Outra alternativa para imprimir todos os valores da matriz é usando a expansão dos parâmetros. O comando a seguir imprimirá todos os valores na mesma linha:

$ echo "$ sampleArray1 [@]"

O próximo exemplo útil será Imprima todos os pares de valor-chave imediatamente usando o loop for da seguinte forma:

$ para chave em "$ !sampleArray1 [@] "; do echo" $ key é uma abreviação para
$ sampleArray1 [$ key] "; feito

Você pode, é claro, tornar essa recuperação de informações mais útil em seus scripts de bash complexos e significativos.

Exemplo 2: Counting Array Itens

O comando a seguir pode ser usado para contar e imprimir o número de elementos em sua matriz associativa:

$ echo "$ #ArrayName [@]"

A saída do comando a seguir mostra que tenho cinco itens no meu samplearray1:

$ echo "$ #sampleArray1 [@]"

Exemplo 3: Adicionando novos dados na matriz

Se você deseja adicionar um item a uma matriz depois que você já o declarou e inicializou, esta é a sintaxe que você pode seguir:

$ Arrayname+= ([key] = valor)

No meu exemplo, quero adicionar outro país junto com a abreviação de nome do condado, então usarei o seguinte comando:

$ sampleArray1+= ([al] = Alabama)

Ecoando os valores da matriz agora sugere que o novo país é adicionado à minha matriz:

$ echo "$ sampleArray1 [@]"

Exemplo 4: Excluindo o item da matriz

Ao desmarcar uma entrada da matriz associativa, você pode excluí -la como um item de matriz. Este é o uso da sintaxe Unsett pode usar para fazê -lo:

$ Unset ArrayName [chave]

No meu exemplo, quero remover o par de valores-chave "al-Alabama" da minha matriz, para que desativei a tecla "Al" em meu comando:

$ unset sampleArray1 [al]

Ecoando os valores da matriz agora sugere que o valor-chave al-Alabama agora é removido da minha matriz:

$ echo "$ sampleArray1 [@]"

Exemplo 5: Verificando se existe um item na matriz

Ao usar a condição IF da seguinte maneira, você pode verificar se um item está disponível em sua matriz associativa ou agora:

$ se [$ ArrayName [SearchKey]+_]; então eco "existe"; else eco "não disponível"; fi

Por exemplo, se eu verificar se o item al-Alabama recentemente excluído existe em minha matriz, a seguinte mensagem será impressa:

$ se [$ sampleArray1 [al]+_]; então eco "existe"; else eco "não disponível"; fi

Se eu verificar se existir um item, o seguinte resultado será impresso:

$ se [$ sampleArray1 [jpn]+_]; então eco "existe"; else eco "não disponível"; fi

Exemplo 6: Excluindo uma matriz

Você pode excluir uma matriz associativa da sua memória Bash usando o comando unset da seguinte maneira:

$ Unset ArrayName

Ao usar o seguinte comando simples, excluirei meu samplearray1 da memória:

$ unset sampleArray1

Agora, quando tento imprimir todos os valores da matriz através do seguinte comando, não recebo nenhum.

$ echo "$ sampleArray1 [@]"

Ao usar esses exemplos em seus scripts Linux Bash, você pode usar o poder das matrizes associativas para obter uma solução para muitos problemas complexos.