Bash словники дають вам хеш-карту і асоціативні масиви в скриптах Linux оболонки. Ми покажемо вам, як використовувати ці потужні і корисні структури даних в ваших власних сценаріях Linux оболонки.
Роза будь-яким іншим ім'ям
Офіційна назва словників асоціативні масиви. Вони також називаються хеш-таблиці і хеш-карт. Вони структура даних, яка функціонує аналогічно звичайний масив, але з істотною відмінністю.
Масив являє собою набір значень даних, що зберігаються в одній структурі даних. Для того, щоб отримати доступ до будь-якого із значень даних, які відомі як елементи масиву, ви повинні знати свою позицію в масиві. Положення елемента масиву в масиві називаються його індексом, так що ці типи масивів відомі як індексовані масиви. Вони найбільш часто використовуваний тип масивів.
Тим не менш, вони мають недолік. Як отримати доступ до елементу масиву, якщо ви не знаєте його позицію в списку? Ви повинні бігти через всі елементи в масиві, тестування, щоб побачити значення в цьому місці, чи є один, що ви шукаєте.
Асоціативні масиви подолати цю проблему. Вони не використовують цілі числа, щоб однозначно ідентифікувати елементи масиву. Вони використовують унікальні слова, відомі як ключові слова. Ви можете отримати значення елемента масиву, використовуючи його ключове слово, незалежно від того, де він розташований всередині масиву. З індексним масивом, цілі числа, що представляють позиції в масиві знаходяться в порядку зростання. Ключові слова в асоціативному масиві може бути в будь-якому порядку.
Ви можете подивитися значення в асоціативному масиві за допомогою функції пошуку з ключовим словом. Дивлячись вгору слово і витяг пов'язаного з ним значенням міміки пошуку слова в словнику і знайти його значення. Ось чому асоціативні масиви відомі як словники.
Bash 4.0 або вище
Асоціативні масиви підтримуються в оболонки Bash версії 4.0 або вище. Якщо ви використовуєте поточний розподіл Linux, ви повинні бути добре. Щоб перевірити версію Bash, використовуйте наступну команду:
Баш --version
Машина використовується для дослідження цієї статті має Bash 5.1.4 встановлено, тому ми добре йти.
Основні принципи
Щоб створити асоціативний масив в командному рядку терміналу або в сценарії, ми використовуємо команду Bash оголошувати. Точний
-А
(Асоціативна) опція говорить Bash, що це буде асоціативний масив, а не індексований масив.
оголосити -A акроніми
Це створює асоціативний масив з ім'ям «абревіатурою.»
Для того, щоб помістити деякі дані в наш масив, ми повинні забезпечити ключові слова і значення. Ми можемо зробити це, використовуючи цей формат:
масив назва [ключ] = Значення
Давайте додамо кілька елементів масиву:
акроніми [ACK] = Квитування
акроніми [BGP] = "прикордонний міжмережевий протокол"
акроніми [CIDR] = "Безкласова-домен маршрутизація"
акроніми [DHCP] = "Протокол динамічної конфігурації хоста"
акроніми [EOF] = "Кінець кадру"
Ці команди визначають п'ять елементів масиву. Зверніть увагу, що значення загорнуті в лапки, якщо є прогалини в значенні. Наші ключові слова були введені в алфавітному порядку, але вони можуть бути введені в будь-якому порядку. Ключові слова повинні бути унікальними. Якщо ви намагаєтеся створити дві запис з тим же ключовим словом, друге значенням, яке ви вводите буде перезаписувати перше. Ви все ще тільки один запис з цим ключовим словом, і він буде пов'язаний з другим значенням, яке ви додали.
Для вилучення значень з масиву, ми використовуємо команди в наступному форматі:
{Масив назва [ключ]}$
Ми можемо використовувати відлуння, щоб відправити висновок у вікні терміналу:
відлуння $ {акроніми [ACK]}
відлуння $ {акроніми [DHCP]}
Використання циклів
Масиви піддаються використовується в циклах дуже добре. Асоціативні масиви не є винятком. Петлі забезпечують ефективні способи для виклику послідовності дій без повторюваних ділянок коду. Перед тим, як дивитися на петлях, є ефективний спосіб оголошувати масиви.
Ми створюємо масиви, використовуючи
DECLARE
команда (те ж саме
-А
варіант, як і раніше), але ми надаємо ключові слова і значення у вигляді списку в командному рядку.
країни заявляють -A = ([ALB] = Албанія [БГРИ] = Бахрейн [CMR] = Камерун [DNK] = Данія [EGY] = Єгипет)
Ім'я масиву «країна», і він підключений до списку значень знак рівності »
=
. " Список значень загортають в дужках «
()
»І кожне ключове слово обгорнуте в дужках«
[]
". Зверніть увагу, що немає ніяких коми, що розділяють значення. Якщо у вас є рядок, яка містить значення простору, вам потрібно обернути його в лапках.
Для того, щоб асоціативний масив повертає ключове слово замість значення, додайте знак оклику «
!
»Перед ім'ям масиву. На символ «
@
»Може бути використаний як шаблон, тобто всі елементи масиву.
Це
за
цикл буде список всіх ключових слів:
для ключа в "$ {країнах [@]!}"; робити відлуння $ ключ; зроблено
Зверніть увагу, що ключові слова не обов'язково в тому порядку, що вони були створені, але це не має значення. Асоціативні масиви не покладатися на упорядкованому індекс.
Ми можемо також використовувати розширення параметрів в список всіх ключових слів. Вони будуть перераховані в одному рядку, а не по одному в рядку.
відлуння "$ {! Країни [@]}"
відлуння "$ {! Абревіатури [@]}"
Ми можемо збільшити наші
за
петля для друку ключових слів і значення, в той же час.
для ключа в "$ {абревіатури [@]!}"; робити відлуння "$ ключ - $ {абревіатури [$ ключ]}"; зроблено
Якщо ми хочемо знати, скільки елементів є в масивах, ми можемо використовувати хеш «#» перед ім'ям масиву замість знаку оклику.
відлуння "$ {! Країни [@]}"
відлуння "$ {! Абревіатури [@]}"
Перевірка, що масив елементів Exists
Якщо пошук за ключовим словом, але там немає такого елемента масиву, повертається значення буде порожнім рядком. Іноді корисно мати різний показник для наявності або відсутності елементу масиву.
Ми можемо перевірити наявність елемента масиву за допомогою «
+ _
»Оператор. Зверніть увагу, що це відбувається після ключового слова, а не перед ім'ям масиву, як попередні оператори, які ми бачили.
, якщо [$ {акроніми [EOF] + _}]; потім відлуння «Знайдено»; ще відлуння «Не знайдено»; фі
, якщо [$ {абревіатури [FTP] + _}]; потім відлуння «Знайдено»; ще відлуння «Не знайдено»; фі
Елемент масиву з ключовим словом «EOF» знаходиться в масиві, але елемент масиву з ключовим словом «FTP» не є.
Додавання елементів масиву
Додавання нових елементів в асоціативний масив легко. На відміну від деяких мов програмування, вам не потрібно, щоб визначити розмір вашого масиву при оголошенні його. Ви можете додавати нові елементи, не вражаючи зумовлений верхня межа.
Для того, щоб додати новий елемент в масив, ми використовуємо «
+ =
»Оператор.
країни + = ([Fji] = Фіджі)
відлуння "$ (# країни [@]}"
відлуння $ {країни [FJI]}
Кількість елементів в масиві тепер шість, і пошук нового ключового слова знаходить елемент масиву і повертає його значення.
Видалення елементів масиву і масивів
Точний
знята з охорони
команда використовується для видалення елементів масиву. Якщо ключове слово містить прогалини, укладіть його в лапки.
незадані акроніми [EOF]
, якщо [$ {акроніми [EOF] + _}]; потім відлуння «Знайдено»; ще відлуння «Не знайдено»; фі
Для того, щоб видалити весь масив, використання
знята з охорони
з ім'ям масиву.
в відключеною країні
Використання змінних з масивами
Використання змінних з асоціативними масивами просто. У цьому прикладі ми встановимо ключ змінного в рядок «EOF». Ми будемо використовувати змінну при додаванні нового елемента масиву в масив. Насправді, ми замінюємо елемент масиву, який ми видалені раніше.
Ми отримаємо новий елемент масиву, зателефонувавши до нового ключового слова, а також, використовуючи змінну. Якщо ключове слово містить пробіли, вам доведеться обернути назву змінної в лапках.
Клавіша = EOF
Акроніми [$ key] = "Кінець кадру"
echo $ {acronyms [eof]}
echo $ {acronyms [$ key]}
Отримати творчість
Наші приклади були колекціями інформації, де кожен елемент масиву не залежить від усіх інших, як і словник. Кожен з них є унікальним визначенням. Але асоціативні масиви можуть так само легко проводити різноманітні частини інформації, пов'язаних з однією річчю, такими як технічні характеристики різних частин комп'ютерного обладнання:
оголосити - специфікація
Специфікація [CPU] = "Dual Core AMD RYZEN 5 3600"
Специфікація [Швидкість] = "3600 МГц"
специфікація [kernel] = "5.11.0-17-Generic x86_64"
специфікація [MEM] = "1978.5 MIB"
специфікація [зберігання] = "32 Гіб"
Специфікація [Shell] = "bash"
echo $ {специфікація [CPU]}
Написання ефективно на мові означає, що знаючи механізми та структури, які він пропонує, і вибирає найбільш підходящий для цієї проблеми, яку ви намагаєтеся вирішити. Асоціативні масиви надають вам простий у використанні спосіб зберігання даних, які ви можете шукати за назвою, як і словник.