Skip to content

Commit 5ced582

Browse files
[Term Entry] Command line Bash: Associative Arrays
1 parent ec410ba commit 5ced582

File tree

1 file changed

+191
-0
lines changed

1 file changed

+191
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
---
2+
Title: 'Associative Arrays'
3+
Description: 'Stores and retrieves data using key-value pairs in Bash scripts'
4+
Subjects:
5+
- 'Bash/Shell'
6+
- 'Computer Science'
7+
Tags:
8+
- 'Arrays'
9+
- 'Bash'
10+
- 'Data Structures'
11+
- 'Scripting'
12+
CatalogContent:
13+
- 'learn-the-command-line'
14+
- 'paths/computer-science'
15+
---
16+
17+
**Associative arrays** in Bash are key-value pair data structures that allows to store and retrieve values using unique keys instead of numeric indices. First introduced in Bash version 4, they provide a powerful way to organize and manipulate data in shell scripts.
18+
19+
Associative arrays are particularly useful for creating lookup tables, storing configuration settings, counting occurrences, and organizing complex data in shell scripts. Their ability to use strings as indexes makes them more flexible than traditional indexed arrays when working with named data.
20+
21+
## Syntax
22+
23+
To work with associative arrays in Bash, we need to understand the following syntax elements:
24+
25+
- `declare -A array_name`: Creates an empty associative array. The `-A` option is required to specify an associative array.
26+
- `array_name[key]=value`: Assigns a value to a specific key in the array.
27+
- `${array_name[key]}`: Retrieves the value associated with a specific key.
28+
- `${!array_name[@]}`: Returns all keys in the array.
29+
- `${array_name[@]}`: Returns all values in the array.
30+
- `unset array_name[key]`: Removes a specific key-value pair from the array.
31+
- `unset array_name`: Deletes the entire array.
32+
33+
**Return value:**
34+
35+
Associative arrays return the values associated with the specified keys when accessed.
36+
37+
## Example 1: Creating and populating basic associative arrays
38+
39+
The following example demonstrates how to declare and initialize an associative array in Bash:
40+
41+
```bash
42+
# Declare an associative array
43+
declare -A user_details
44+
45+
# Add key-value pairs
46+
user_details[name]="John Doe"
47+
user_details[email]="[email protected]"
48+
user_details[age]=30
49+
user_details[role]="Developer"
50+
51+
# Print a specific value
52+
echo "Name: ${user_details[name]}"
53+
54+
# Print all keys
55+
echo "Available information: ${!user_details[@]}"
56+
57+
# Print all values
58+
echo "User details: ${user_details[@]}"
59+
```
60+
61+
The output will be as follows:
62+
63+
```shell
64+
Name: John Doe
65+
Available information: name email role age
66+
User details: John Doe [email protected] Developer 30
67+
```
68+
69+
In this example, we create an associative array called `user_details` and add various information about a user. The keys are strings (`'name'`, `'email'`, `'age'`, `'role'`), and we can access specific values using those keys.
70+
71+
## Example 2: Building a configuration manager with associative arrays
72+
73+
Associative arrays are perfect for configuration management in Bash scripts. Here's how they can be used to store and retrieve application settings:
74+
75+
```bash
76+
#!/bin/bash
77+
78+
# Declare an associative array for configuration
79+
declare -A config
80+
81+
# Load configuration values
82+
config[db_host]="localhost"
83+
config[db_port]="3306"
84+
config[db_user]="admin"
85+
config[db_name]="myapp"
86+
config[app_env]="development"
87+
config[debug]="true"
88+
config[log_level]="info"
89+
90+
# Function to get configuration value
91+
get_config() {
92+
local key=$1
93+
local default_value=$2
94+
95+
# If the key exists in the array, return its value
96+
if [[ -n "${config[$key]+x}" ]]; then
97+
echo "${config[$key]}"
98+
else
99+
# Otherwise return the default value
100+
echo "$default_value"
101+
fi
102+
}
103+
104+
# Usage examples
105+
echo "Database Host: $(get_config db_host)"
106+
echo "Log Level: $(get_config log_level 'warning')"
107+
echo "Cache Time: $(get_config cache_time '3600')" # Doesn't exist, will use default
108+
109+
# Check if debug mode is enabled
110+
if [[ "$(get_config debug)" == "true" ]]; then
111+
echo "Debug mode is enabled"
112+
fi
113+
```
114+
115+
The output will be as follows:
116+
117+
```shell
118+
Database Host: localhost
119+
Log Level: info
120+
Cache Time: 3600
121+
Debug mode is enabled
122+
```
123+
124+
This example demonstrates using an associative array to manage configuration settings. The `get_config` function retrieves values by key and provides default values for missing keys, making the configuration system robust and flexible.
125+
126+
## Example 3: Creating a word frequency counter with associative arrays
127+
128+
Associative arrays are excellent for counting and tracking occurrences. Here's how to build a simple word frequency counter:
129+
130+
```bash
131+
#!/bin/bash
132+
133+
# Declare an associative array for word counts
134+
declare -A word_counts
135+
136+
# Sample text to analyze
137+
text="Bash scripting is powerful. Bash allows automation of repetitive tasks.
138+
Learn Bash to become more efficient at command line tasks."
139+
140+
# Convert to lowercase and split into words
141+
for word in $(echo "$text" | tr '[:upper:]' '[:lower:]' | tr -d '.' | tr ' ' '\n'); do
142+
# Skip empty words
143+
if [[ -z "$word" ]]; then
144+
continue
145+
fi
146+
147+
# Increment the count for this word
148+
if [[ -z "${word_counts[$word]}" ]]; then
149+
word_counts[$word]=1
150+
else
151+
((word_counts[$word]++))
152+
fi
153+
done
154+
155+
# Print the results
156+
echo "Word frequency analysis:"
157+
echo "-----------------------"
158+
159+
# Sort words by frequency (highest first)
160+
for word in "${!word_counts[@]}"; do
161+
echo "$word: ${word_counts[$word]}"
162+
done | sort -rn -k2
163+
```
164+
165+
Output:
166+
167+
```shell
168+
Word frequency analysis:
169+
-----------------------
170+
bash: 3
171+
to: 2
172+
tasks: 2
173+
powerful: 1
174+
of: 1
175+
more: 1
176+
line: 1
177+
learn: 1
178+
is: 1
179+
efficient: 1
180+
command: 1
181+
become: 1
182+
at: 1
183+
automation: 1
184+
allows: 1
185+
scripting: 1
186+
repetitive: 1
187+
```
188+
189+
This example showcases how associative arrays can be used to count word frequencies in a text. The array keys are words, and the values are the number of occurrences. This pattern is commonly used in text processing and log analysis.
190+
191+
To further enhance your Bash scripting skills, consider taking our [Learn Bash Scripting](https://www.codecademy.com/learn/bash-scripting) course.

0 commit comments

Comments
 (0)