Что такое словари Bash в Linux и как их использовать?

Стилизованный ноутбук с терминалом со строками текста.Фатмавати ачмад дзэнури / Shutterstock.com
Словари Bash предоставляют вам хэш-карты и ассоциативные массивы в сценариях оболочки Linux. Мы покажем вам, как использовать эти мощные и полезные структуры данных в ваших собственных сценариях оболочки Linux.

Роза под любым другим именем

Формальное название словарей — ассоциативные массивы. Их также называют хеш-таблицами и хеш-картами. Это структура данных, которая функционирует аналогично обычному массиву, но со значительной разницей.
Массив — это набор значений данных, содержащихся в одной структуре данных. Чтобы получить доступ к любому из значений данных, которые известны как элементы массива, вам необходимо знать их положение в массиве. Положение элемента массива в массиве называется его индексом, поэтому эти типы массивов известны как индексированные массивы. Это наиболее часто используемый тип массивов.

Однако у них есть недостаток. Как получить доступ к элементу массива, если вы не знаете его позицию в списке? Вам нужно пройти через все элементы в массиве, проверяя, является ли значение в этом месте тем, которое вы ищете.

Ассоциативные массивы решают эту проблему. Они не используют целые числа для однозначной идентификации элементов массива. Они используют уникальные слова, известные как ключевые слова. Вы можете получить значение элемента массива, используя его ключевое слово, независимо от того, где он расположен в массиве. В индексированном массиве целые числа, представляющие позиции в массиве, расположены в порядке возрастания. Ключевые слова в ассоциативном массиве могут располагаться в любом порядке.

Вы можете найти значение в ассоциативном массиве, выполнив поиск по его ключевому слову. Поиск слова и получение связанного с ним значения имитирует поиск слова в словаре и нахождение его значения. Вот почему ассоциативные массивы известны как словари.

Bash 4.0 или выше

Ассоциативные массивы поддерживаются в оболочке Bash версии 4.0 и выше. Если вы используете текущий дистрибутив Linux, все будет в порядке. Чтобы проверить свою версию Bash, используйте эту команду:
bash —version

На машине, использованной для исследования этой статьи, установлен Bash 5.1.4, так что все готово.

Основные принципы

Чтобы создать ассоциативный массив в командной строке терминала или в скрипте, мы используем команду объявления Bash. Параметр -A (ассоциативный) сообщает Bash, что это будет ассоциативный массив, а не индексированный массив.
объявить -A аббревиатуры

Это создает ассоциативный массив под названием «акронимы».

Чтобы поместить некоторые данные в наш массив, нам нужно предоставить ключевые слова и значения. Мы можем сделать это в таком формате:
имя-массива[key]= Значение
Добавим несколько элементов массива:
акронимы[ACK]= Акронимы в знак признательности[BGP]= Аббревиатуры «Протокол пограничного шлюза»[CIDR]= Аббревиатуры «Бесклассовая междоменная маршрутизация»[DHCP]= Аббревиатуры «Протокол динамической конфигурации хоста»[EOF]= «Конец кадра»

Эти команды определяют пять элементов массива. Обратите внимание, что значения заключаются в кавычки, если в значении есть пробелы. Наши ключевые слова были введены в алфавитном порядке, но их можно вводить в любом порядке. Ключевые слова должны быть уникальными. Если вы попытаетесь создать две записи с одним и тем же ключевым словом, второе введенное вами значение перезапишет первое. У вас по-прежнему будет только одна запись с этим ключевым словом, и она будет связана со вторым добавленным вами значением.

Чтобы получить значения из массива, мы используем команды в этом формате:
$ {имя-массива[key]}

Мы можем использовать echo для отправки вывода в окно терминала:
echo $ {аббревиатуры[ACK]} echo $ {аббревиатуры[DHCP]}

Использование петель

Массивы очень хорошо подходят для использования в циклах. Ассоциативные массивы — не исключение. Циклы предоставляют эффективные способы вызова последовательности действий без повторяющихся участков кода. Прежде чем мы рассмотрим циклы, есть эффективный способ объявления массивов.

Мы создаем массивы с помощью команды declare (та же опция -A, что и раньше), но мы предоставляем ключевые слова и значения в виде списка в командной строке.
объявить -A стран = ( [ALB]= Албания [BHR]= Бахрейн [CMR]= Камерун [DNK]= Дания [EGY]= Египет)
Имя массива — «страны», и он связан со списком значений знаком равенства «=». Список значений заключен в круглые скобки «()», а каждое ключевое слово заключено в скобки «[]«. Обратите внимание, что значения не разделяются запятыми. Если у вас есть строка значений, содержащая пробелы, вам нужно заключить ее в кавычки.

Чтобы ассоциативный массив возвращал ключевое слово вместо значения, добавьте восклицательный знак «!» перед именем массива. Символ at «@» может использоваться как подстановочный знак, означающий все элементы массива.

В этом цикле for будут перечислены все ключевые слова:
для ключа в «$ {! странах[@]} «; сделать echo $ key; готово

Обратите внимание, что ключевые слова не обязательно перечислены в том порядке, в котором они были созданы, но это не имеет значения. Ассоциативные массивы не полагаются на упорядоченный индекс.

Мы также можем использовать расширение параметров, чтобы перечислить все ключевые слова. Они будут перечислены в одной строке, а не по одной в строке.
echo «$ {! страны[@]} «эхо» $ {! акронимы[@]} »

Мы можем расширить цикл for, чтобы одновременно печатать ключевые слова и значения.
для ввода аббревиатур $ {![@]} «; do echo» $ key — $ {аббревиатуры[$key]}»; Выполнено

Если мы хотим знать, сколько элементов находится в массивах, мы можем использовать решётку «#» перед именем массива вместо восклицательного знака.
echo «$ {! страны[@]} «эхо» $ {! акронимы[@]} »

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

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

Проверить наличие элемента массива можно с помощью оператора «+ _». Обратите внимание, что это идет после ключевого слова, а не перед именем массива, как предыдущие операторы, которые мы видели.
если [ ${acronyms[EOF]+ _}]; затем эхо «Найдено»; иначе echo «Не найдено»; фи если [ ${acronyms[FTP]+ _}]; затем эхо «Найдено»; иначе echo «Не найдено»; фи

Элемент массива с ключевым словом «EOF» находится в массиве, а элемент массива с ключевым словом «FTP» — нет.

Добавление элементов массива

Добавить новые элементы в ассоциативный массив очень просто. В отличие от некоторых языков программирования, вам не нужно определять размер вашего массива при его объявлении. Вы можете продолжать добавлять новые элементы, не превышая заранее определенного верхнего предела.

Чтобы добавить новый элемент в массив, мы используем оператор «+ =».
страны + = ( [FJI]= Фиджи) echo «$ (# стран[@]} «echo $ {страны[FJI]}

Количество элементов в массиве теперь шесть, и поиск нового ключевого слова находит элемент массива и возвращает его значение.

Удаление элементов и массивов массивов

Команда unset используется для удаления элементов массива. Если в ключевом слове есть пробелы, заключите его в кавычки.
неустановленные сокращения[EOF]
если [ ${acronyms[EOF]+ _}]; затем эхо «Найдено»; иначе echo «Не найдено»; фи

Чтобы удалить весь массив, используйте unset с именем массива.
нестандартные страны

Использование переменных с массивами

Использование переменных с ассоциативными массивами несложно. В этом примере мы установим переменный ключ в строку «EOF». Мы будем использовать эту переменную, когда добавим в массив новый элемент массива. Фактически, мы заменяем элемент массива, который мы удалили ранее.

Мы получим новый элемент массива, вызвав его с ключевым словом new, а также с помощью переменной. Если ключевое слово содержит пробелы, вам нужно заключить имя переменной в кавычки.
key = аббревиатуры EOF[$key]= «Конец кадра» echo $ {аббревиатуры[EOF]} echo $ {аббревиатуры[$key]}

Проявите творческий подход

Наши примеры представляют собой наборы информации, в которых каждый элемент массива не зависит от всех остальных, как словарь. Каждый из них — уникальное определение. Но ассоциативные массивы могут так же легко содержать множество фрагментов информации, связанных с одним предметом, например, спецификации различных частей компьютерного оборудования:
объявить -A спецификация спецификации[CPU]= Спецификация «Dual Core AMD Ryzen 5 3600″[Speed]= «3600 МГц» спецификация[Kernel]= Спецификация «5.11.0-17-generic x86_64″[Mem]= Спецификация «1978,5 МБ»[Storage]= Спецификация «32 ГиБ»[Shell]= «Bash» echo $ {спецификация[CPU]}

Эффективное написание на языке означает знание механизмов и структур, которые он предлагает, и выбор наиболее подходящего для проблемы, которую вы пытаетесь решить. Ассоциативные массивы дают вам простой в использовании способ хранения данных, которые вы можете искать по имени, как в словаре.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *