Понимание ассоциативных массивов в Linux Bash с примерами

Ассоциативные массивы — это абстрактный тип данных, который можно рассматривать как словари или карты. Их отличие от других массивов заключается в том, что они содержат пары ключ-значение, где ключи могут быть произвольными и определяемыми пользователем строками вместо обычных номеров индексов. Связанные массивы имеют два основных свойства:
  • Каждый ключ в массиве может появляться только один раз. Вы можете думать об этом как об уникальном идентификаторе пользователя в списке.
  • Значение может появляться в массиве более одного раза. Например, два человека в списке могут иметь одно и то же имя, но должны иметь разные идентификаторы пользователей.

В этой статье мы объясним, как вы можете объявлять и инициализировать ассоциативные массивы в Linux bash. Мы подробнее рассмотрим возможности ассоциативных массивов с помощью различных примеров.

Мы выполнили примеры, упомянутые в этой статье, в системе Debian 10 Buster. Однако вы можете легко выполнить репликацию почти на всех дистрибутивах Linux.

Проверка предварительных требований

Для использования ассоциативных массивов в Linux Bash ваша версия GNU Bash должна быть версии 4 или выше. Откройте Терминал Linux, открыв его через поиск в Application Launcher. Затем введите следующую команду, чтобы проверить установленную версию bash:

$ bash —version

Моя текущая версия bash — 5.0.3, так что я готов. Если ваша версия bash меньше 4, вы можете обновить bash, выполнив следующую команду как sudo:

$ sudo apt-get install —only-upgrade bash

Объявление ассоциативного массива и его инициализация

Объявление ассоциативного массива в bash довольно просто и может быть выполнено с помощью команды declare:

$ declare -A «ArrayName»

В нашем примере мы будем объявлять переменную массива с именем sampleArray1 следующим образом:

$ declare -A sampleArray1

Следующим шагом является инициализация необходимых значений для вашего массива. В нашем примере мы хотим иметь массив, в котором значениями являются названия нескольких стран, а ключами — соответствующие сокращения названий стран. Здесь мы будем передавать значения массива, одно за другим, следующим образом:

$ ArrayName [key] = Value

Пример :

$ sampleArray1 [CHN] = Китай
$ sampleArray1 [JPN] = Япония
$ sampleArray1 [KOR] = Корея
$ sampleArray1 [TWN] = Тайвань
$ sampleArray1 [TH] = Таиланд

Быстрая альтернатива — объявить и инициализировать массив с помощью одной команды bash следующим образом:

$ declare -A ArrayName = ([key1] = Value1 [key2] = Value2 [Key3] = Value3…. )

Вот как мы можем объявить и инициализировать наш упомянутый массив, альтернативно, следующим образом:

$ declare -A sampleArray1 = ([CHN] = Китай [JPN] = ЯПОНИЯ [KOR] = Корея [TWN] = Тайвань
[TH] = Таиланд)

Теперь мы представим несколько примеров, которые подробно расскажут, что вы можете делать с ассоциативными массивами в bash:

Пример 1: доступ к ключам и значениям массива

В этом примере мы объясним, как вы можете:

  • Распечатать значение против ключа
  • Распечатать сразу все ключи массива
  • Печатать сразу все значения массива

И,

  • Распечатать сразу все пары «ключ-значение»

Печать

Вы можете напечатайте значение для ключа , используя следующий синтаксис команды:

$ echo $ {ArrayName [keyName]}

Вот как мы можем получить доступ к полному названию страны, указав аббревиатуру названия страны из нашего sampleArr ay1:

$ echo $ {sampleArray1 [CHN]}
$ echo $ {sampleArray1 [TWN]}

Если вас интересует печать всех ключей ваш ассоциативный массив, вы можете сделать это, используя следующий синтаксис:

$ для ключа в «$ {! ArrayName [@]}»; сделать echo $ key; готово

Следующая команда распечатает все сокращения названий стран из моего sampleArray1

с использованием цикла for:

$ для ключа в «$ {! sampleArray1 [@]}»; сделать echo $ key; готово

Еще одна альтернатива печати всех ключей из массива с помощью расширения параметров. Следующая команда напечатает все ключи в одной строке:

$ echo «$ {! SampleArray1 [@]}»

Если вас интересует печать всех значений массива сразу , это можно сделать с помощью цикла for следующим образом:

$ for val in «$ {ArrayName [@]}»; сделать echo $ val; готово

Следующая команда напечатает все полные названия стран, хранящиеся в моем sampleArray1:

$ for val in «$ {sampleArray1 [@]} «; сделать echo $ val; готово

Еще одна альтернатива печати всех значений из массива с помощью расширения параметров. Следующая команда напечатает все значения в одной строке:

$ echo «$ {sampleArray1 [@]}»

Следующий полезный пример будет распечатать все пары ключ-значение сразу, используя цикл for следующим образом:

$ для ключа в «$ {! sampleArray1 [@]}»; do echo «$ key — это сокращение от
$ {sampleArray1 [$ key]}»; готово

Конечно, вы можете сделать получение этой информации более полезным в ваших сложных и содержательных сценариях bash.

Пример 2: Подсчет элементов массива

Для подсчета и печати количества элементов в ассоциативном массиве можно использовать следующую команду:

$ echo «$ {# ArrayName [@]} «

Вывод следующей команды показывает, что у меня есть пять элементов в моем sampleArray1:

$ echo» $ {# sampleArray1 [@]} «

Пример 3: Добавление новых данных в массив

Если вы хотите добавить элемент в массив после того, как вы уже объявили и инициализировали его, вы можете следовать следующему синтаксису:

$ ArrayName + = ([key] = value)

В моем примере я хочу добавить другую страну вместе с сокращением названия округа, поэтому я буду использовать следующую команду:

$ sampleArray1 + = ([AL] = Alabama)

Отображение значений массива теперь предполагает, что n Новая страна добавлена ​​в мой массив:

$ echo «$ {sampleArray1 [@]}»

Пример 4: Удаление элемента из массива

Удаление записи из ассоциативного массива , вы можете удалить его как элемент массива. Для этого можно использовать нестандартный синтаксис:

$ unset ArrayName [Key]

В моем примере , Я хочу удалить пару ключ-значение «AL-Alabama» из своего массива, поэтому я отключу ключ «AL» в своей команде:

$ unset sampleArray1 [AL ]

Отображение значений массива теперь предполагает, что ключ-значение AL-Alabama теперь удалено из моего массива:

$ echo «$ {sampleArray1 [@]}»

Пример 5: Проверка, существует ли элемент в массиве

Используя условие if следующим образом, вы можете проверить, доступен ли элемент в вашем ассоциативном массиве или сейчас:

$ if [$ {ArrayName [searchKEY] + _}]; затем эхо «Существует»; else echo «Недоступно»; fi

Например, если я проверю, существует ли в моем массиве недавно удаленный элемент AL-Alabama, будет напечатано следующее сообщение:

$ if [$ {sampleArray1 [AL] + _}]; затем эхо «Существует»; else echo «Недоступно»; fi

Если я проверяю элемент если существует, будет напечатан следующий результат:

$ if [$ {sampleArray1 [JPN] + _}]; затем эхо «Существует»; else echo «Недоступно»; fi

Пример 6: Удаление массива

Вы можете удалить ассоциативный массив из своей памяти bash с помощью следующей команды unset:

$ unset ArrayName

Используя следующую простую команду, я удалю свой sampleArray1 из памяти:

$ unset sampleArray1

Теперь, когда я пытаюсь распечатать все значения массива с помощью следующей команды, я ничего не получаю.

$ echo «$ {sampleArray1 [@]}»

Используя эти примеры в ваших сценариях Linux bash, вы можете использовать возможности ассоциативных массивов для решения многих сложных проблем.

Оцените статью
nanomode.ru
Добавить комментарий