Um guia para matrizes Bash
Publicados: 2022-12-30Neste guia sobre arrays Bash, você aprenderá como declarar e trabalhar com arrays indexados e associativos no Bash.
No Bash, você pode criar arrays para armazenar uma coleção de elementos. Arrays Bash são coleções unidimensionais . Em linguagens de programação como C e C++, arrays são coleções de elementos do mesmo tipo de dados. No entanto, no Bash, dependendo do caso de uso, você pode armazenar números inteiros e strings no mesmo array.
Neste tutorial, você aprenderá como declarar um array Bash e acessar seus elementos. Em seguida, você aprenderá como percorrer os elementos de uma matriz e anexar elementos a uma matriz. Por fim, você aprenderá sobre arrays associativos no Bash.
Vamos começar!
Interessado em codificar junto? Aqui estão os pré-requisitos:
- Se você estiver em uma máquina Mac ou Linux, pode abrir seu terminal e codificar junto.
 - Se você estiver em uma máquina Windows, instale o Git Bash ou o Windows Subsystem for Linux (WSL2).
 
Como declarar uma matriz Bash
Nesta seção, você aprenderá a sintaxe para declarar uma matriz Bash e exemplos de código.
Sintaxe da Declaração de Matriz Bash
Você pode declarar uma matriz no Bash usando a seguinte sintaxe:
 $ arrayName=(elt1 elt2 ... eltN) # arrayName is the name of the array # elt1 through eltN are the N elements in the array Na sintaxe acima, arrayName denota o nome da matriz que contém N elementos elt1...eltN .
 Os elementos de uma matriz são colocados entre os parênteses de abertura e fechamento () . Além disso, observe que os elementos do array são separados por um espaço em branco . Como acontece com qualquer variável Bash, não deve haver espaço em branco antes ou depois do operador de atribuição = .
Na maioria das outras linguagens de programação, você separará os elementos de uma matriz ou coleções semelhantes por vírgulas. Mas no Bash, o espaço em branco é o separador.
No Bash, esses arrays nos quais os elementos são identificados por seu índice são referidos como array indexado .
Declarando Arrays Indexados no Bash
 Vamos criar prices , uma matriz de números.
 $ prices=(24 27 18 30 15)Conforme mencionado na sintaxe, os números na matriz de
pricessão separados por um espaço em branco, entre parênteses, sem espaços antes e depois do operador de atribuição =.
 No Bash, você pode usar o comando echo para imprimir o valor de uma variável. Usar $variableName imprime o valor de variableName . No entanto, você pode ver que usar o nome do array imprime apenas o primeiro elemento.
 $ echo $prices 24Arrays Bash seguem a indexação zero. Portanto, o primeiro elemento está no índice 0, o segundo elemento está no índice 1 e assim por diante. Você também pode usar indexação negativa; o índice do último elemento da matriz é -1.
O que acontece se você tentar acessar o elemento em um determinado índice e imprimi-lo? Vamos tentar imprimir o elemento no índice 1.
 $ echo $prices[1] 24[1] Por que a saída é 24[1]? Isso ocorre porque o Bash substitui $prices por 24, o primeiro elemento da matriz e [1] é impresso como tal.
 Para imprimir o elemento em um determinado índice, você pode usar a expansão de parâmetro no formato ${prices[index]} .
 $ echo ${prices[1]} # 27 $ echo ${prices[2]} # 18 Para imprimir todos os elementos da matriz, você pode especificar @ em vez de um índice específico.
 $ echo ${prices[@]} 24 27 18 30 15Em seguida, vamos criar um array de strings. A execução do seguinte comando cria uma matriz indexada:
 $ declare -a fruits A opção -a cria uma matriz indexada. Agora você pode preencher a matriz, um elemento por vez, declarando o elemento em um índice específico, conforme mostrado abaixo:
 $ fruits[0]="cherry" $ fruits[1]="berry" $ fruits[2]="apple" $ fruits[3]="pear" $ fruits[4]="melon" $ fruits[5]="orange" Agora, para imprimir todos os elementos do array, você pode usar ${fruits[@]} .
 $ echo ${fruits[@]} cherry berry apple pear melon orangeAcessar os elementos de uma matriz Bash

Você pode acessar os elementos da matriz das seguintes maneiras:
- Percorra o array e acesse o elemento diretamente
 - Percorra o conjunto de índices e acesse elementos em um índice específico
 
Percorra a matriz e os elementos de acesso
Se você codificou em Python, terá usado o loop for usando a seguinte sintaxe:
 for elt in some_list: print(elt)Agora vamos escrever o equivalente em Bash do loop for acima.
 Sabemos que {prices[@]} se expande para todos os elementos na matriz de prices . E ${prices[@]} nos dá os valores de todos os elementos.
 O loop bash for é semelhante à sintaxe do loop for do Python, mas as instruções no corpo do loop devem ser colocadas entre do e done , conforme mostrado:
 $ for price in ${prices[@]} > do > echo $price > done Como usamos o comando echo e imprimimos o valor da variável price , obtemos a seguinte saída:
 # output 24 27 18 30 15Acesse os elementos usando o índice da matriz
 Outra maneira de percorrer arrays é usando o índice dos elementos. Isso é semelhante à construção do loop for em Python usando a função range() :

 for i in range(len(some_list)): print(i) Para obter uma lista de índices para percorrer, você pode colocar um ponto de exclamação ( ! ) antes do nome da matriz na expansão do parâmetro. Isso fornecerá a lista de todos os índices válidos para o array, conforme mostrado:
 $ echo ${!prices[@]} 0 1 2 3 4 A matriz de prices contém 5 elementos, então o índice começa em 0 e vai até 4.
 Em seguida, podemos percorrer a lista de índices e acessar o elemento em cada índice. Para o índice i , ${prices[i]} é o elemento no índice i .
 $ for i in ${!prices[@]} > do > echo ${prices[i]} > doneO loop acima imprime todos os elementos na matriz.
 # output 24 27 18 30 15Aqui, após acessar cada elemento, realizamos uma operação simples de impressão de seu valor. Em geral, podemos ter qualquer processamento válido nos elementos.
Anexar elementos a uma matriz Bash

 Na matriz de prices , temos cinco elementos (nos índices 0,1,2,3 e 4). Se você quiser adicionar um elemento ao final da matriz no índice 5, faça o seguinte:
 $ prices[5]=21Vemos que 21 foi anexado ao final da matriz de preços.
 $ echo ${prices[@]} 24 27 18 30 15 21No entanto, é mais conveniente acrescentar ao final do array — sem lembrar — o índice do último elemento adicionado ou o número de elementos atualmente no array.
 Você pode usar arrayName+=(elements(s)) para anexar um ou mais elementos a um array, conforme mostrado:
 $ prices+=(10) Agora, se imprimirmos a matriz de prices , veremos que 10 foi acrescentado ao final da matriz.
 $ echo ${prices[@]} 24 27 18 30 15 21 10A seguir, vamos aprender como declarar arrays associativos no Bash.
Matrizes associativas no Bash
 Se você deseja definir um relacionamento em termos de pares chave-valor, pode usar um array associativo . Você pode declarar um array associativo usando a seguinte sintaxe geral. Observe que usamos a opção -A em vez de -a .
 $ declare -A fruits_pricesVocê pode adicionar elementos à matriz associativa especificando a chave e o valor correspondente. Aqui, adicionamos os nomes das frutas como chaves e os números da matriz de preços como valores.
 $ fruits_prices[cherry]=24 $ fruits_prices[berry]=27 $ fruits_prices[apple]=18 $ fruits_prices[pear]=30 $ fruits_prices[melon]=15 $ fruits_prices[orange]=21Então, como acessamos os elementos em um array associativo?
Da mesma forma que você procuraria o valor usando a chave correspondente em um dicionário Python, você pode acessar os valores em uma matriz associativa usando as chaves.
 $ echo ${fruits_prices[berry]} # 27 Vemos que ${fruits_prices[@]} se expande para os valores e ${!fruits_prices[@]} se expande para as chaves.
 $ echo ${fruits_prices[@]} # Output: 18 27 21 24 30 15 $ echo ${!fruits_prices[@]} # Output: apple berry orange cherry pear melonObservação : a ordem dos elementos não é a mesma em que os adicionamos. Isso ocorre porque, ao contrário dos arrays indexados, os arrays associativos não são coleções ordenadas. Em vez disso, eles trabalham na associação entre as chaves e os valores. Portanto, as chaves são para arrays associativos o que os índices são para arrays indexados.
Você também pode percorrer o array associativo e acessar as chaves, conforme mostrado:
 $ for key in ${!fruits_prices[@]} > do > echo $key > done # Output apple berry orange cherry pear melonO loop a seguir mostra como você pode acessar os valores.
 $ for value in ${fruits_prices[@]} > do > echo $value > done # Output 18 27 21 24 30 15 Embora seja recomendado usar arrayName[key]=value , você também pode declará-lo como uma sequência como esta:
 declare -A arrayName arrayName=(key1 value1 key2 value2 ... keyN valueN)Dessa forma, o Bash infere o primeiro elemento como a primeira chave, o segundo elemento como o primeiro valor e assim por diante.
Resumindo
Espero que agora você entenda como criar e trabalhar com matrizes Bash. Aqui está uma rápida revisão do que você aprendeu.
-  Você pode declarar um array indexado no Bash usando a sintaxe 
arrayName=(elt1 elt2 elt3 ... eltN)ou executardeclare -a arrayNamee adicionar elementos ao array. -  Para acessar os elementos, você pode percorrer usando 
${arrayName[@]}. Como alternativa, você pode obter a lista de todos os índices válidos usando a expansão de parâmetro${!arrayName[@]}. - Por fim, você também aprendeu como declarar um array associativo para armazenar pares chave-valor no Bash.
 
Em seguida, confira o tutorial para loops no Bash.
