Neste tópico, demonstraremos os fundamentos do array bash e como eles são usados no script bash shell.
Uma matriz pode ser definida como uma coleção de elementos de tipos semelhantes. Ao contrário da maioria das linguagens de programação, os arrays no script bash não precisam ser uma coleção de elementos semelhantes. Como o Bash não discrimina a string de um número, um array pode conter strings e números.
Bash não fornece suporte para arrays multidimensionais; não podemos ter os elementos que são arrays em si. Bash fornece suporte para arrays unidimensionais indexados numericamente, bem como arrays associativos. Para acessar o array numericamente indexado deste último, podemos usar índices negativos. O índice '-1' será considerado como referência para o último elemento. Podemos usar vários elementos em um array.
Declaração de matriz Bash
Matrizes no Bash podem ser declaradas das seguintes maneiras:
Criando matrizes indexadas numericamente
Podemos usar qualquer variável como um array indexado sem declará-la.
Para declarar explicitamente uma variável como um Bash Array, use a palavra-chave 'declare' e a sintaxe pode ser definida como:
declare -a ARRAY_NAME
onde,
ARRAY_NAME indica o nome que atribuiríamos ao array.
Observação:As regras para nomear uma variável no Bash são as mesmas para nomear um array.
Um método geral para criar um array indexado pode ser definido da seguinte forma:
ARRAY_NAME[index_1]=value_1 ARRAY_NAME[index_2]=value_2 ARRAY_NAME[index_n]=value_n
onde a palavra-chave 'index' é usada para definir inteiros positivos.
Criando matrizes associativas
Ao contrário dos arrays indexados numericamente, os arrays associativos são declarados primeiro. Podemos usar a palavra-chave 'declare' e a opção -A (maiúsculas) para declarar os arrays associativos. A sintaxe pode ser definida como:
declare -A ARRAY_NAME
Um método geral para criar um array associativo pode ser definido da seguinte forma:
declare -A ARRAY_NAME ARRAY_NAME[index_foo]=value_foo ARRAY_NAME[index_bar]=value_bar ARRAY_NAME[index_xyz]=value_xyz
onde index_ é usado para definir qualquer string.
Também podemos escrever o formulário acima da seguinte maneira:
jogos de mensagens com android
declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz )
Inicialização do array Bash
Para inicializar um Bash Array, podemos usar o operador de atribuição (=), especificando a lista dos elementos entre parênteses, separados por espaços como abaixo:
ARRAY_NAME=(element_1st element_2nd element_Nth)
Observação:Aqui, o primeiro elemento terá um índice 0. Além disso, não deve haver espaço ao redor do operador de atribuição (=).
Acessar elementos do Bash Array
Para acessar os elementos de um Bash Array, podemos usar a seguinte sintaxe:
echo ${ARRAY_NAME[2]}
Imprimir matriz Bash
Podemos usar a palavra-chave ‘declare’ com a opção ‘-p’ para imprimir todos os elementos de um Bash Array com todos os índices e detalhes. A sintaxe para imprimir o Bash Array pode ser definida como:
declare -p ARRAY_NAME
Operações de matriz
Depois que um array é atribuído, podemos realizar algumas operações úteis nele. Podemos exibir suas chaves e valores, bem como modificá-los anexando ou removendo os elementos:
Elementos de referência
Para fazer referência a um único elemento, precisamos saber o número do índice do elemento. Podemos referenciar ou imprimir qualquer elemento usando a seguinte sintaxe:
${ARRAY_NAME[index]}
Observação:Chaves ${} são necessárias para evitar os operadores de expansão de nome de arquivo do shell.
Por exemplo, vamos imprimir um elemento de um array com índice 2:
Script Bash
#!/bin/bash #Script to print an element of an array with an index of 2 #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #printing the element with index of 2 echo ${example_array[2]}
Saída
erro: não foi possível encontrar ou carregar a classe principal
Javatpoint
Se usarmos @ ou * no lugar de um índice especificado, ele será expandido para todos os membros do array. Para imprimir todos os elementos, podemos usar o seguinte formulário:
Script Bash
#!/bin/bash #Script to print all the elements of the array #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing all the elements echo '${example_array[@]}'
Saída
Welcome to Javatpoint
A única diferença entre usar @ e * é que o formulário fica entre aspas duplas ao usar @. No primeiro caso (ao usar @), a expansão fornece um resultado em uma palavra para cada elemento do array. Pode ser melhor descrito com a ajuda de 'for loop'. Suponha que temos um array com três elementos, 'Welcome', 'To' e 'Javatpoint':
$ example_array= (Welcome to Javatpoint)
Aplicando um loop com @:
for i in '${example_array[@]}'; do echo '$i'; done
Produzirá o seguinte resultado:
Welcome To Javatpoint
Aplicando um loop com *, um único resultado será produzido contendo todos os elementos do array como uma única palavra:
Welcome To Javatpoint
É importante entender o uso de @ e * porque é útil ao usar o formulário para iterar pelos elementos do array.
Imprimindo as chaves de um array
Também podemos recuperar e imprimir as chaves utilizadas em arrays indexados ou associativos, em vez de seus respectivos valores. Isso pode ser executado adicionando o ! operador antes do nome do array como abaixo:
matriz em linguagem c
${!ARRAY_NAME[index]}
Exemplo
#!/bin/bash #Script to print the keys of the array #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing the Keys echo '${!example_array[@]}'
Saída
0 1 2
Encontrando o comprimento da matriz
Podemos contar o número de elementos contidos no array usando a seguinte forma:
${#ARRAY_NAME[@]}
Exemplo
#!/bin/bash #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing Array Length echo 'The array contains ${#example_array[@]} elements'
Saída
The array contains 3 elements
Percorrer a matriz
O método geral para iterar cada item em uma matriz é usar o 'loop for'.
Exemplo
#!/bin/bash #Script to print all keys and values using loop through the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Array Loop for i in '${!example_array[@]}' do echo The key value of element '${example_array[$i]}' is '$i' done
Saída
Outro método comum para percorrer um array é recuperar o comprimento do array e usar o loop estilo C:
Script Bash
#!/bin/bash #Script to loop through an array in C-style declare -a example_array=( 'Welcome''To''Javatpoint' ) #Length of the Array length=${#example_array[@]} #Array Loop for (( i=0; i <${length}; i++ )) do echo $i ${example_array[$i]} done < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-2.webp" alt="Bash Array"> <h3>Adding Elements to an Array</h3> <p>We have an option to add elements to an indexed or associative array by specifying their index or associative key respectively. To add the new element to an array in bash, we can use the following form:</p> <pre> ARRAY_NAME[index_n]='New Element' </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring an array declare -a example_array=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP HTML JavaScript </pre> <p>Another method for adding a new element to an array is by using the += operator. There is no need to specify the index in this method. We can add one or multiple elements in the array by using the following way:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring the Array declare -a example_array=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP JavaScript CSS SQL </pre> <h3>Updating Array Element</h3> <p>We can update the array element by assigning a new value to the existing array by its index value. Let's change the array element at index 4 with an element 'Javatpoint'.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( 'We''welcome''you''on''SSSIT' ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]} </pre> <p> <strong>Output</strong> </p> <pre> We welcome you on Javatpoint </pre> <h3>Deleting an Element from an Array</h3> <p>If we want to delete the element from the array, we have to know its index or key in case of an associative array. An element can be removed by using the ' <strong>unset</strong> ' command:</p> <pre> unset ARRAY_NAME[index] </pre> <p>An example is shown below to provide you a better understanding of this concept:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java HTML CSS JavaScript </pre> <p>Here, we have created a simple array consisting of five elements, 'Java', 'Python', 'HTML', 'CSS' and 'JavaScript'. Then we removed the element 'Python' from the array by using 'unset' and referencing the index of it. The index of element 'Python' was '1', since bash arrays start from 0. If we check the indexes of the array after removing the element, we can see that the index for the removed element is missing. We can check the indexes by adding the following command into the script:</p> <pre> echo ${!example_array[@]} </pre> <p>The output will look like:</p> <pre> 0 2 3 4 </pre> <p>This concept also works for the associative arrays.</p> <h3>Deleting the Entire Array</h3> <p>Deleting an entire array is a very simple task. It can be performed by passing the array name as an argument to the ' <strong>unset</strong> ' command without specifying the index or key.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]} </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-3.webp" alt="Bash Array"> <p>There will be no output if we try to print the content of the above script. An empty result is returned because the array doesn't exist anymore.</p> <h3>Slice Array Elements</h3> <p>Bash arrays can also be sliced from a given starting index to the ending index.</p> <p>To slice an array from starting index 'm' to an ending index 'n', we can use the following syntax:</p> <pre> SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}') </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' do echo $i done </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-4.webp" alt="Bash Array"> <hr></${length};>
Exemplo
#!/bin/bash #Declaring an array declare -a example_array=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}'
Saída
Java Python PHP HTML JavaScript
Outro método para adicionar um novo elemento a um array é usar o operador +=. Não há necessidade de especificar o índice neste método. Podemos adicionar um ou vários elementos ao array da seguinte maneira:
Exemplo
#!/bin/bash #Declaring the Array declare -a example_array=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}'
Saída
Java Python PHP JavaScript CSS SQL
Atualizando Elemento Array
Podemos atualizar o elemento do array atribuindo um novo valor ao array existente por seu valor de índice. Vamos alterar o elemento do array no índice 4 por um elemento 'Javatpoint'.
powershell versus bash
Exemplo
#!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( 'We''welcome''you''on''SSSIT' ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]}
Saída
We welcome you on Javatpoint
Excluindo um elemento de um array
Se quisermos deletar o elemento do array, temos que saber seu índice ou chave no caso de um array associativo. Um elemento pode ser removido usando o ' desarmar 'comando:
unset ARRAY_NAME[index]
Um exemplo é mostrado abaixo para fornecer uma melhor compreensão deste conceito:
Exemplo
#!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}'
Saída
Java HTML CSS JavaScript
Aqui, criamos um array simples composto por cinco elementos, ‘Java’, ‘Python’, ‘HTML’, ‘CSS’ e ‘JavaScript’. Em seguida, removemos o elemento 'Python' do array usando 'unset' e referenciando o índice dele. O índice do elemento 'Python' era '1', já que os arrays bash começam em 0. Se verificarmos os índices do array após remover o elemento, podemos ver que o índice do elemento removido está faltando. Podemos verificar os índices adicionando o seguinte comando ao script:
echo ${!example_array[@]}
A saída será semelhante a:
0 2 3 4
Este conceito também funciona para matrizes associativas.
Excluindo todo o array
Excluir um array inteiro é uma tarefa muito simples. Pode ser executado passando o nome do array como argumento para o ' desarmar 'comando sem especificar o índice ou chave.
Exemplo
#!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]}
Saída
Não haverá saída se tentarmos imprimir o conteúdo do script acima. Um resultado vazio é retornado porque o array não existe mais.
Elementos da matriz de fatias
Matrizes Bash também podem ser divididas de um determinado índice inicial até o índice final.
Para dividir uma matriz do índice inicial 'm' até um índice final 'n', podemos usar a seguinte sintaxe:
SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}')
Exemplo
#!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' do echo $i done
Saída
${length};>