Android

Matrizes Bash

Transposição e Igualdade de Matrizes | Matemática com Python #6

Transposição e Igualdade de Matrizes | Matemática com Python #6

Índice:

Anonim

Matrizes são uma das estruturas de dados mais usadas e fundamentais. Você pode pensar em uma matriz como uma variável que pode armazenar várias variáveis ​​dentro dela., abordaremos as matrizes Bash e explicaremos como usá-las nos seus scripts Bash.

Matrizes Bash

O Bash suporta tipos unidimensionais de matrizes indexadas e associativas. Matrizes numéricas são referenciadas usando números inteiros, e associativas são referenciadas usando seqüências de caracteres.

Matrizes indexadas numericamente podem ser acessadas a partir do final usando índices negativos, o índice de -1 referência ao último elemento. Os índices não precisam ser contíguos.

Diferentemente da maioria das linguagens de programação, os elementos do array Bash não precisam ser do mesmo tipo de dados. Você pode criar uma matriz que contenha seqüências de caracteres e números.

O Bash não suporta matrizes multidimensionais e você não pode ter elementos de matriz que também sejam matrizes.

Não há limite para o número máximo de elementos que podem ser armazenados em uma matriz.

Criando matrizes bash

As matrizes no Bash podem ser inicializadas de maneiras diferentes.

Criando matrizes indexadas numericamente

As variáveis ​​bash são sem tipo, qualquer variável pode ser usada como uma matriz indexada sem declará-la.

Para declarar explicitamente uma matriz, use o comando builtin:

declare -a array_name

Uma maneira de criar uma matriz indexada é usando o seguinte formulário:

array_name=value_1 array_name=value_2 array_name=value_n

Onde index_* é um número inteiro positivo.

Outra maneira de criar uma matriz numérica é especificar a lista dos elementos entre parênteses, separados por espaço vazio:

array_name=(element_1 element_2 element_N)

Quando a matriz é criada usando o formulário acima, a indexação começa em zero, ou seja, o primeiro elemento tem um índice de 0 .

Criando matrizes associativas

Diferente da indexada numericamente, as matrizes associativas devem ser declaradas antes de poderem ser usadas.

Para declarar uma matriz associativa, use declare builtin com a opção -A (maiúscula):

declare -A array_name

Matrizes associativas podem ser criadas usando o seguinte formulário:

declare -A array_name array_name=value_foo array_name=value_bar array_name=value_xyz

Onde index_* pode ser qualquer string.

Você também pode criar uma matriz associativa usando o formulário abaixo:

declare -A array_name array_name=(=value_foo =value_bar =value_xyz)

Operações de matriz

A sintaxe das matrizes Bash pode parecer um pouco estranha no começo, mas fará mais sentido depois que você ler este artigo.

Elementos de referência

Para fazer referência a um único elemento, você precisa conhecer o índice do elemento.

Qualquer elemento pode ser referenciado usando a seguinte sintaxe:

${array_name} A sintaxe para acessar um elemento da matriz é semelhante à sintaxe da maioria das linguagens de programação. Os colchetes ${} são necessários para evitar os operadores de expansão de nome de arquivo do shell.

Vamos imprimir o elemento com o índice 1 :

## declare the array declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## print element echo ${my_array}

Helium

## declare the array declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## print all elements echo "${my_array}"

Hydrogen Helium Lithium Beryllium

A única diferença entre @ e * é quando o formulário ${my_array} está entre aspas duplas. Nesse caso, * expande para uma única palavra em que os elementos da matriz são separados por espaço. @ expande cada elemento da matriz para uma palavra separada. Isso é especialmente importante ao usar o formulário para analfabetos através dos elementos da matriz.

Para imprimir as chaves da matriz, adicione o ! operador antes do nome da matriz:

${!array_name}

Aqui está um exemplo:

## declare the array declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## print all elements echo "${!my_array}"

0 1 2 3

Comprimento da matriz

Para obter o comprimento de uma matriz, use o seguinte formulário:

${#array_name} A sintaxe é a mesma que quando se faz referência a todos os elementos com adição do caractere # antes do nome da matriz.

## declare the array declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## array Length echo ${#my_array}

4

Loop pela matriz

A maneira mais comum de iterar sobre cada item em uma matriz é usando o loop for:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## Array Loop for i in "${my_array}" do echo "$i" done

O código acima irá percorrer a matriz e imprimir cada elemento em uma nova linha:

Hydrogen Helium Lithium Beryllium

Aqui está um exemplo de como imprimir todas as chaves e valores:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## Array Loop for i in "${!my_array}" do echo "$i" "${my_array}" done

0 Hydrogen 1 Helium 2 Lithium 3 Beryllium

Outra maneira de fazer um loop através de uma matriz é obter o comprimento da matriz e usar o loop de C style :

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") # Length of the array length=${#my_array} # Array Loop for ((i=0; i < ${length}; i++)) do echo $i ${my_array} done

0 Hydrogen 1 Helium 2 Lithium 3 Beryllium

Adicione um novo elemento

Para adicionar um novo elemento a uma matriz bash e especificar seu índice, use o seguinte formulário:

my_array="New Element"

Aqui está um exemplo:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## add new element my_array="Aluminum" ## print all elements echo "${my_array}"

Hydrogen Helium Lithium Beryllium Aluminum

Outra maneira de adicionar um novo elemento a uma matriz sem especificar o índice é usando o operador += . Você pode adicionar um ou vários elementos:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## add new elements my_array+=(Cobalt Nickel) ## print all elements echo "${my_array}"

Hydrogen Helium Lithium Beryllium Cobalt Nickel

Excluir um elemento

Para excluir um único elemento, você precisará conhecer o índice do elemento. Um elemento pode ser removido usando o comando unset :

unset my_array

Vamos ver um exemplo:

declare -a my_array=("Hydrogen" "Helium" "Lithium" "Beryllium") ## remove element unset my_array ## print all elements echo "${my_array}"

Hydrogen Helium Beryllium

Conclusão

Explicamos como criar matrizes indexadas e associativas. Também mostramos como iterar pelas matrizes, calcular o comprimento da matriz e adicionar e remover elementos.

terminal bash