Bash:
Использование ассоциативных массивов
Как это сделать:
Прежде всего, объявите ассоциативный массив в Bash:
declare -A my_array
Затем, вы можете начать заполнять его значениями, используя строки в качестве ключей:
my_array["name"]="Linux Journal"
my_array["topic"]="Программирование"
Чтобы получить доступ к элементу, используйте его ключ:
echo ${my_array["name"]} # Выводит: Linux Journal
Итерация по ключам и значениям также проста:
for key in "${!my_array[@]}"; do
echo "$key: ${my_array[$key]}"
done
Пример вывода может выглядеть так:
name: Linux Journal
topic: Программирование
Чтобы добавить или изменить элементы, просто присвойте значение ключу, аналогично начальному заполнению:
my_array["readers"]="Вы"
И чтобы удалить элемент, используйте unset
:
unset my_array["topic"]
Глубокое погружение
Ассоциативные массивы были введены в Bash версии 4.0 и являются относительно новым дополнением к языку. До их введения работа с массивами, индексы которых не являются целыми числами, была затруднительной и часто требовала обходных путей или использования внешних инструментов, таких как awk
или sed
.
Внутри Bash ассоциативные массивы реализованы с использованием хеш-таблиц. Эта реализация обеспечивает эффективный поиск по ключу, который остается довольно постоянным независимо от размера массива, что является критически важной особенностью для производительности при выполнении скриптов.
Хотя ассоциативные массивы в Bash приносят много силы и гибкости в написание скриптов, они имеют свой набор ограничений, таких как несколько громоздкая работа по сравнению с массивами в языках более высокого уровня, таких как Python или JavaScript. Для сложных задач манипуляции с данными может оказаться предпочтительным использование внешних инструментов или языков, которые лучше подходят для задачи.
Тем не менее, для многих типичных задач написания скриптов ассоциативные массивы представляют собой ценный инструмент в арсенале программиста Bash, позволяя создавать более читабельные и удобные в обслуживании скрипты за счет использования значимых строковых ключей вместо числовых индексов.