Учебники

Unix / Linux — Использование массивов оболочек

В этой главе мы обсудим, как использовать массивы оболочки в Unix. Переменная оболочки достаточно способна содержать одно значение. Эти переменные называются скалярными переменными.

Оболочка поддерживает другой тип переменной, называемый переменной массива . Это может содержать несколько значений одновременно. Массивы предоставляют метод группировки набора переменных. Вместо создания нового имени для каждой необходимой переменной вы можете использовать одну переменную массива, в которой хранятся все остальные переменные.

Все правила именования, обсуждаемые для переменных оболочки, будут применимы при именовании массивов.

Определение значений массива

Разницу между переменной массива и скалярной переменной можно объяснить следующим образом.

Предположим, вы пытаетесь представить имена разных учеников в виде набора переменных. Каждая из отдельных переменных является скалярной переменной следующим образом:

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

Мы можем использовать один массив для хранения всех вышеупомянутых имен. Ниже приведен самый простой способ создания переменной массива. Это помогает присвоить значение одному из его индексов.

array_name[index]=value

Здесь array_name — это имя массива, index — это индекс элемента в массиве, который вы хотите установить, а value — это значение, которое вы хотите установить для этого элемента.

Как пример, следующие команды —

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

Если вы используете оболочку ksh , вот синтаксис инициализации массива —

set -A array_name value1 value2 ... valuen

Если вы используете оболочку bash , вот синтаксис инициализации массива —

array_name=(value1 ... valuen)

Доступ к значениям массива

После того, как вы установили любую переменную массива, вы получаете доступ к ней следующим образом —

${array_name[index]}

Здесь array_name — это имя массива, а index — это индекс значения, к которому необходимо получить доступ. Ниже приведен пример, чтобы понять концепцию —

Live Demo

#!/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]}"

Приведенный выше пример сгенерирует следующий результат —

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

Вы можете получить доступ ко всем элементам в массиве одним из следующих способов —

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

Здесь array_name — имя интересующего вас массива. Следующий пример поможет вам понять концепцию —

Live Demo

#!/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[@]}"

Приведенный выше пример сгенерирует следующий результат —