Unix / Linux - Использование массивов оболочки
В этой главе мы обсудим, как использовать массивы оболочки в Unix. Переменная оболочки достаточно способна хранить одно значение. Эти переменные называются скалярными переменными.
Shell поддерживает другой тип переменной, называемый array variable. Это может содержать несколько значений одновременно. Массивы предоставляют метод группировки набора переменных. Вместо того, чтобы создавать новое имя для каждой необходимой переменной, вы можете использовать одну переменную массива, в которой хранятся все остальные переменные.
Все правила именования, обсуждаемые для переменных оболочки, будут применяться при именовании массивов.
Определение значений массива
Разницу между переменной массива и скалярной переменной можно объяснить следующим образом.
Предположим, вы пытаетесь представить имена разных студентов в виде набора переменных. Каждая из отдельных переменных является скалярной переменной следующим образом:
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 shell, вот синтаксис инициализации массива -
set -A array_name value1 value2 ... valuen
Если вы используете bash shell, вот синтаксис инициализации массива -
array_name=(value1 ... valuen)
Доступ к значениям массива
После того, как вы установили любую переменную массива, вы получаете к ней доступ следующим образом:
${array_name[index]}
Здесь array_name - это имя массива, а index - это индекс значения, к которому нужно получить доступ. Ниже приведен пример для понимания концепции -
#!/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 - это имя интересующего вас массива. Следующий пример поможет вам понять концепцию -
#!/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[@]}"
В приведенном выше примере будет получен следующий результат -
$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy