Во многих языках программирования одной структур являются словарь позволяющий хранить набор объектов ключ и значение. Другими словами есть в словарь где хранится набор ключей, и каждый ключ имеет значение, связанное с ним. Структура словаря оптимизирована для быстрого поиска значений на основе их ключей, поэтому она часто реализуется с помощью хеш-таблиц.
Объявить переменную словаря в Bash
Переменные в bash не строго типизированы. Например, переменную bash можно рассматривать как строки или целые числа, можно обеспечить типичное поведение в bash, объявив "атрибут" переменной.
1 | declare -A key_value_var |
Добавление пар ключ-значение в словарь в Bash
Добавить строковые ключ / значение без кавычек
1 | key_value_var[key1] = value1 |
Добавить строковые ключ / значение в кавычки
1 | key_value_var['key2'] = 'value2' |
Добавить пару ключ / значение, используя переменные bash
1 2 3 | key_var = 'key3' value_var = 'value3' key_value_var[$key_var] = $value_var |
Получение пар ключ-значение из словаря в Bash
Для получения значения переменной, по ключу, необходимо добавить знак $ и фигурные скобки, в противном случае вернется ключ
1 2 3 | echo ${key_value_var[key1]} echo ${key_value_var[key2]} echo ${key_value_var[$another_key_var]} |
Обновление существующей пары "ключ-значение" в словаре в Bash
Обновление существующей пары "ключ-значение" (Изменение значения существующего ключа) с точки зрения синтаксиса ничем не отличается от вставки новой пары "ключ-значение". При обновлении существующее значение просто перезаписывается новым значением.
1 | key_value_var[key1]='Another value of a variable' |
Проверка существования ключа в словаре в Bash
1 2 3 4 5 6 7 | if [ -v key_value_var[key1] ]; then echo "key1 exists" fi if [ ! -v key_value_var[key2] ]; then echo "key2 does not exists" fi |
Удаление пары ключ-значение из словаря в Bash
Для удаления значений из словаря, используется оператор unset
1 2 3 | unset key_value_var[key1] unset key_value_var['key2'] unset key_value_var[$key_var] |
Перебор ключ-значение из словаря в Bash
Другой часто используемой функцией является перебор всех пар ключ-значение, хранящихся в словаре, и выполнение некоторых действий.
Нужно заключить переменную ${!test_var[@]} в цикле "кавычками", чтобы безопасно обрабатывать ключи, содержащие пробелы.
1 2 3 | for key in "${!key_value_var[@]}"; do echo "$key ${key_value_var[$key]}" done |