GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Scripting:matriz indexada explicada con ejemplos

Matrices son un tipo de estructura de datos que se utiliza para almacenar valores de un determinado tipo. También puede pensar en la matriz como una variable, pero una variable solo puede almacenar un valor donde una matriz puede almacenar múltiples valores dentro de ella. El concepto de matriz no solo está vinculado a bash. Cualquier lenguaje de programación con el que trabaje tendrá matrices pero con diferencias de implementación.

Bash admite dos tipos de matrices:

  • Matriz indexada
  • Matriz asociativa

Las matrices indexadas son un tipo de matriz en la que los elementos (valores) se almacenan y se les asigna un número entero a partir de 0. a N . Los elementos dentro de la matriz se referencian mediante el número de índice. Conocerás más sobre esto en el próximo artículo. El enfoque principal de este artículo son solo las matrices indexadas.

Cómo inicializar una matriz indexada en Bash

El primer paso para trabajar con la matriz es crearla. El término crear, definir, inicializar una matriz se usarán indistintamente, pero apunta al mismo significado:crear la matriz.

Para crear una matriz, debe usar corchetes y colocar los elementos de la matriz (valores) dentro de los corchetes.

$ arr1=( one 2 three 4 )

Puntos importantes a tener en cuenta:

  • Las matrices Bash pueden almacenar elementos de un tipo de datos diferente. En algunos lenguajes de programación, puede almacenar valores en una matriz del mismo tipo solamente.
  • No hay limitaciones sobre cuántos elementos se pueden almacenar en la matriz. Depende de la disponibilidad de la memoria de su sistema.

También puede usar declare comando con -a bandera para crear una matriz indexada.

$ declare -a arr1
$ arr1=( one 2 three 4 )

O,

$ declare -a arr1=( one 2 three 4 )

Cómo agregar o ver elementos de una matriz

Puede crear una matriz con valores como se muestra en la sección anterior o simplemente crear una matriz vacía y agregar valores más tarde. A continuación se muestra cómo crear una matriz vacía.

$ locations=()

Cada elemento de una matriz tiene un valor de índice asociado a partir de 0 a N . Tienes que agregar nuevos elementos a una matriz usando la posición de índice.

$ locations[0]="Chennai"
$ locations[1]="Mumbai"

Aquí está la ilustración gráfica de agregar elementos a una matriz.

Para ver los elementos de una matriz, puede utilizar cualquiera de las siguientes sintaxis.

$ echo ${locations[@]}
$ echo ${locations[*]}

Para conocer la diferencia entre @ y * y cómo funciona con una matriz, consulte la sección "Repetir elementos de matriz" en nuestro Bash For Loop guía.

Si intenta enumerar los elementos de la matriz sin usar @ o * solo se imprimirá el primer elemento de la matriz.

$ echo ${locations}

Puede acceder a un elemento en particular directamente usando su posición de índice.

$ echo ${locations[1]}

Valor de índice de una matriz

En la sección anterior, mostré cómo agregar elementos en una matriz usando la posición de índice. Cuando agrega matrices usando posiciones de índice, puede omitir y agregar elementos a las diferentes posiciones de índice.

Las ubicaciones de la matriz tienen dos elementos en posiciones 0 y 1 . Ahora puedo omitir el índice 2 y agregar a las diferentes posiciones del índice.

$ locations[5]="Delhi"

En la imagen de arriba, puede ver que agregué un nuevo elemento a la matriz en la posición de índice 5.

Si desea imprimir los valores de índice de los elementos, prefije la matriz con el "!" símbolo como el siguiente:

$ echo ${!locations[@]}

Esto solo imprimirá los valores del índice en lugar de imprimir los elementos.

Para imprimir tanto el índice como los elementos, use el siguiente fragmento.

for val in ${!locations[@]}
do
   echo "index = ${val} , value = ${locations[$val]}"
done

Agregar valores a una matriz

Puede agregar nuevos elementos a una matriz sin usar sus valores de índice y esto agregará elementos a la matriz.

locations=( Chennai Mumbai Delhi )
locations+=( Bangalore )
locations+=( Hyderabad )
$ echo ${locations[@]}
$ echo ${!locations[@]}

Encontrar la longitud de una matriz

Puede saber cuántos elementos hay en una matriz anteponiendo el # símbolo antes de la matriz.

$ echo ${#locations[@]}

Usando el mismo # símbolo, también puede encontrar si la matriz está vacía o no.

if [[ ${#locations[@]} -ne 0 ]]; then
    echo "Array is Not empty"
else
    echo "Array is Empty"
fi

Eliminar elementos de una matriz

Para eliminar un elemento de la matriz, puede usar unset dominio. Eche un vistazo al siguiente ejemplo en el que se usa unset ordena el elemento desde el index(2) se elimina.

$ echo ${locations[@]}
$ unset locations[2]
$ echo ${locations[@]}

Eliminar una matriz

Para eliminar la matriz, puede usar el mismo unset comando.

$ unset locations
$ echo ${locations[@]}

Vaciar una matriz

A veces, es posible que desee eliminar todos los elementos de la matriz y mantener la matriz vacía. En ese caso, simplemente puede recrear la matriz.

$ echo ${locations[@]}
Chennai Mumbai Delhi Hyderabad Bangalore
$ locations=()
$ echo ${locations[@]}

Almacenar la salida del comando como matriz

Puede ejecutar cualquier comando e intentar almacenar la salida en una matriz. El comando debe estar entre corchetes para que la salida se almacene como una matriz.

$ path_list=( $(echo $PATH | tr ":" "\n") )
$ echo ${path_list[@]}

Corte de matriz

La división le brinda la flexibilidad de extraer ciertos elementos de la matriz en función de su posición de índice.

La siguiente es la sintaxis para dividir:

${locations[@]:index:length}

Si desea capturar todos los elementos pero desde una posición de índice de inicio en particular, puede hacerlo de la siguiente manera usando solo el índice.

$ echo ${locations[@]:index} # syntax
$ echo ${locations[@]:2}

En el ejemplo anterior, la matriz se imprimirá a partir de la posición de índice 2 y hasta el último elemento. Si especifica la longitud junto con el índice, utilizará la siguiente fórmula para dividir la matriz.

From index to index+length-1 (inclusive) # Formula
$ echo ${locations[@]:1:3}

Si omite el índice y solo da la longitud, se dividirá utilizando la siguiente fórmula.

From Index 0 to length-1 (inclusive)
$ echo ${locations[@]::4}

Conclusión

En este artículo, lo he guiado a través de la matriz indexada de bash . Las matrices son muy importantes cuando comienza a escribir scripts bash complejos. Le brindan la capacidad de almacenar, recuperar y manipular datos de diferentes tipos fácilmente. A diferencia de los lenguajes de programación como python, no hay formas integradas de usar arreglos fácilmente para realizar algunas tareas complejas pero que aún se pueden lograr.

En nuestra próxima guía, hablaremos sobre matriz asociativa en detalle.

  • Secuencias de comandos de Bash:matriz asociativa explicada con ejemplos

Lectura relacionada:

  • Secuencias de comandos de Bash:ciclo while y till explicado con ejemplos
  • Bash Scripting:funciones explicadas con ejemplos
  • Secuencias de comandos de Bash:variables explicadas con ejemplos
  • Redireccionamiento de Bash explicado con ejemplos
  • Comando Bash Echo explicado con ejemplos en Linux
  • Tutorial de Bash Heredoc para principiantes

Linux
  1. ¿Cómo crear una matriz de elementos únicos a partir de una cadena/matriz en Bash?

  2. Matrices bash con ejemplos

  3. Declaración de Bash If-Else con ejemplos

  4. Arreglos AWK explicados con 5 ejemplos prácticos

  5. El último tutorial de Bash Array con 15 ejemplos

Bash Scripting - Comando Printf explicado con ejemplos

Bash Scripting:matriz asociativa explicada con ejemplos

Comando Tr en Linux explicado con ejemplos

Bash Scripting Part2 – Bucles for y while con ejemplos

Tutorial de introducción a Bash Scripting con 5 ejemplos prácticos

Bash Script for Loop explicado con ejemplos