dictionaries in bash


Dictionary / associative arrays / hash map are very useful data structures and they can be created in bash. They work quite similar as in python (and other languages, of course with fewer features :)). We will go over a few examples.

dictionaries were added in bash version 4.0 and above.

To check the version of bash run following:

bitarray$bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
bitarray$

Note: you have to declare associative array otherwise bash will take it as index variable:


Declare an associative array / dictionary / hash map

$ declare -A associative


Adding key-value pairs

bitarray>declare -A associative
bitarray>associative[key1]=val1
bitarray>associative[key2]=val2
bitarray>associative[key3]=val3
bitarray>


How to retrieve key-values?

bitarray>echo ${associative[key1]}
val1
bitarray>echo ${associative[key2]}
val2
bitarray>echo ${associative[key3]}
val3

 


How to insert values in a single line?

#dict=([key1]=value1 [key2]=value2 [key3]=value3 ....)### syntax

bitarray>associative=([key1]=1 [key2]=2 [key3]=3)
bitarray>echo ${associative[key3]}
3

 


How to get all elements of a dictionary?

bitarray>echo ${associative[@]} #### get all values
3 2 1

bitarray>echo ${associative[*]}  ### get all values
3 2 1

bitarray>echo ${!associative[*]}  ### get all keys
key3 key2 key1

 


How to delete a key in a dictionary?

bitarray>echo ${!associative[*]}  ### there are three keys
key3 key2 key1
bitarray>unset associative[key1]  ### lets delete key1
bitarray>echo ${!associative[*]}   
key3 key2

 


Iterate over associative array and print keys- values.

bitarray>for i in ${!associative[@]}; do
> echo $i ${associative[$i]}
> done
key3 3
key2 2
bitarray>