Unix / Linux: uso de matrices de shell

En este capítulo, discutiremos cómo usar matrices de shell en Unix. Una variable de shell es lo suficientemente capaz de contener un solo valor. Estas variables se denominan variables escalares.

Shell admite un tipo diferente de variable llamada array variable. Esto puede contener varios valores al mismo tiempo. Las matrices proporcionan un método para agrupar un conjunto de variables. En lugar de crear un nuevo nombre para cada variable necesaria, puede utilizar una única variable de matriz que almacene todas las demás variables.

Todas las reglas de nomenclatura discutidas para Variables de Shell serían aplicables al nombrar matrices.

Definición de valores de matriz

La diferencia entre una variable de matriz y una variable escalar se puede explicar de la siguiente manera.

Suponga que está intentando representar los nombres de varios estudiantes como un conjunto de variables. Cada una de las variables individuales es una variable escalar de la siguiente manera:

NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"

Podemos usar una sola matriz para almacenar todos los nombres mencionados anteriormente. A continuación se muestra el método más simple para crear una variable de matriz. Esto ayuda a asignar un valor a uno de sus índices.

array_name[index]=value

Aquí array_name es el nombre de la matriz, índice es el índice del elemento en la matriz que desea establecer y valor es el valor que desea establecer para ese elemento.

Como ejemplo, los siguientes comandos:

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"

Si está utilizando el ksh shell, aquí está la sintaxis de inicialización de matriz:

set -A array_name value1 value2 ... valuen

Si está utilizando el bash shell, aquí está la sintaxis de inicialización de matriz:

array_name=(value1 ... valuen)

Acceder a los valores de matriz

Después de haber establecido cualquier variable de matriz, acceda a ella de la siguiente manera:

${array_name[index]}

Aquí array_name es el nombre de la matriz e index es el índice del valor al que se accede. A continuación se muestra un ejemplo para comprender el concepto:

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

El ejemplo anterior generará el siguiente resultado:

$./test.sh
First Index: Zara
Second Index: Qadir

Puede acceder a todos los elementos de una matriz de una de las siguientes formas:

${array_name[*]}
${array_name[@]}

aquí array_name es el nombre de la matriz que le interesa. El siguiente ejemplo le ayudará a comprender el concepto:

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"

El ejemplo anterior generará el siguiente resultado:

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy