Bird
Raised Fist0
Bash Scriptingscripting~10 mins

Associative arrays (declare -A) in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Associative arrays (declare -A)
Start script
↓
Declare associative array
↓
Assign key-value pairs
↓
Access or modify values by key
↓
Iterate over keys or values
↓
Use values as needed
↓
End script
This flow shows how to declare an associative array, add key-value pairs, access or change values by keys, and iterate over them.
Execution Sample
Bash Scripting
declare -A fruits
fruits[apple]=red
fruits[banana]=yellow
echo ${fruits[apple]}
Declare an associative array 'fruits', assign colors to keys, then print the color of apple.
Execution Table
StepActionArray StateOutput
1declare -A fruitsfruits = {}
2fruits[apple]=redfruits = {apple: red}
3fruits[banana]=yellowfruits = {apple: red, banana: yellow}
4echo ${fruits[apple]}fruits = {apple: red, banana: yellow}red
5End of scriptfruits = {apple: red, banana: yellow}
💡 Script ends after printing the value for key 'apple'.
Variable Tracker
VariableStartAfter Step 2After Step 3Final
fruitsundefinedapple: redapple: red, banana: yellowapple: red, banana: yellow
Key Moments - 3 Insights
Why do we use 'declare -A' before using an associative array?
In step 1, 'declare -A fruits' tells bash this array will use string keys. Without it, bash treats arrays as indexed with numbers.
Can we use numbers as keys in associative arrays?
Yes, keys can be any string, including numbers as strings. But you must still declare the array with '-A' to use string keys (see steps 2 and 3).
What happens if we try to access a key that doesn't exist?
If you access a missing key like ${fruits[orange]}, bash returns an empty string. This is not shown in the table but is important to know.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output at step 4?
Ared
Byellow
Capple
Dbanana
💡 Hint
Check the 'Output' column at step 4 in the execution_table.
At which step does the array first contain the key 'banana'?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the 'Array State' column to see when 'banana' appears.
If we add 'fruits[orange]=orange' after step 3, what will be the final array state?
A{apple: red, banana: yellow}
B{apple: red, banana: yellow, orange: orange}
C{orange: orange}
D{}
💡 Hint
Adding a new key-value pair appends it to the existing array state.
Concept Snapshot
declare -A arrayName  # Declare associative array
arrayName[key]=value     # Assign value to key
${arrayName[key]}        # Access value by key
Keys are strings, not numbers
Use loops to iterate keys or values
Full Transcript
This example shows how to declare an associative array in bash using 'declare -A'. We assign string keys like 'apple' and 'banana' with values 'red' and 'yellow'. Accessing a value uses the syntax ${array[key]}. The execution table traces each step: declaration, assignments, and output. Variables track how the array grows. Key moments clarify why declaration is needed, key types, and missing keys. The quiz tests understanding of output, array state changes, and adding new keys.

Practice

(1/5)
1. What is the main purpose of using declare -A in a Bash script?
easy
A. To define a function
B. To declare a regular indexed array
C. To create an associative array with named keys
D. To start a loop

Solution

  1. Step 1: Understand the role of declare -A

    This command is used in Bash to declare an associative array, which means the array uses named keys instead of numbers.
  2. Step 2: Differentiate from other declarations

    Regular arrays use numbers as keys and are declared without -A. Functions and loops are declared differently.
  3. Final Answer:

    To create an associative array with named keys -> Option C
  4. Quick Check:

    declare -A means associative array [OK]
Hint: Remember: -A means associative array with named keys [OK]
Common Mistakes:
  • Confusing associative arrays with regular indexed arrays
  • Thinking declare -A creates a function
  • Assuming declare -A starts a loop
2. Which of the following is the correct syntax to declare an associative array named colors in Bash?
easy
A. declare colors=(red green blue)
B. declare -A colors
C. array colors=(red green blue)
D. declare -a colors

Solution

  1. Step 1: Identify the correct declaration for associative arrays

    In Bash, declare -A is used to declare associative arrays, so declare -A colors is correct.
  2. Step 2: Understand other options

    declare -a is for indexed arrays, and the other options are invalid syntax for associative arrays.
  3. Final Answer:

    declare -A colors -> Option B
  4. Quick Check:

    Associative array declaration uses declare -A [OK]
Hint: Use declare -A to declare associative arrays [OK]
Common Mistakes:
  • Using declare -a which is for indexed arrays
  • Trying to assign values during declaration incorrectly
  • Using invalid syntax like array keyword
3. What will be the output of the following Bash script?
declare -A fruits
fruits[apple]=red
fruits[banana]=yellow
for key in "${!fruits[@]}"; do
  echo "$key is ${fruits[$key]}"
done
medium
A. apple banana\nred yellow
B. red is apple\nyellow is banana
C. Syntax error
D. apple is red\nbanana is yellow

Solution

  1. Step 1: Understand the associative array and loop

    The array fruits has keys 'apple' and 'banana' with values 'red' and 'yellow'. The loop iterates over keys and prints key and value pairs.
  2. Step 2: Predict the output format

    Each line prints "key is value", so output lines are "apple is red" and "banana is yellow" (order may vary but both lines appear).
  3. Final Answer:

    apple is red\nbanana is yellow -> Option D
  4. Quick Check:

    Loop prints key and value pairs correctly [OK]
Hint: Loop keys with ${!array[@]} to access associative array keys [OK]
Common Mistakes:
  • Printing values as keys or vice versa
  • Expecting syntax error due to quotes
  • Confusing indexed arrays with associative arrays
4. Identify the error in the following Bash script that uses an associative array:
declare -A animals
animals=([dog]=bark [cat]=meow)
echo ${animals[dog]}
medium
A. No error, script runs correctly
B. Associative array cannot be assigned values this way
C. Missing quotes around keys in assignment
D. Incorrect syntax for echo command

Solution

  1. Step 1: Check associative array assignment syntax

    Assigning values with animals=([dog]=bark [cat]=meow) is valid syntax for associative arrays in Bash.
  2. Step 2: Verify echo command usage

    echo ${animals[dog]} correctly prints the value for key 'dog'. No syntax errors present.
  3. Final Answer:

    No error, script runs correctly -> Option A
  4. Quick Check:

    Associative array assignment and access are correct [OK]
Hint: Assign associative arrays with ([key]=value ...) syntax [OK]
Common Mistakes:
  • Thinking quotes are mandatory around keys in assignment
  • Assuming echo syntax is wrong without quotes
  • Confusing indexed array assignment with associative arrays
5. You want to create an associative array user_ages that stores names as keys and ages as values. Which script correctly adds entries and prints all names with their ages?
hard
A. declare -A user_ages user_ages=( [Alice]=30 [Bob]=25 ) for name in "${!user_ages[@]}"; do echo "$name is ${user_ages[$name]} years old" done
B. declare user_ages user_ages=( Alice=30 Bob=25 ) for name in "${user_ages[@]}"; do echo "$name is ${user_ages[$name]} years old" done
C. declare -A user_ages user_ages=( Alice:30 Bob:25 ) for name in "${!user_ages[@]}"; do echo "$name is ${user_ages[$name]} years old" done
D. declare -a user_ages user_ages=( [Alice]=30 [Bob]=25 ) for name in "${!user_ages[@]}"; do echo "$name is ${user_ages[$name]} years old" done

Solution

  1. Step 1: Check declaration and assignment

    declare -A user_ages user_ages=( [Alice]=30 [Bob]=25 ) for name in "${!user_ages[@]}"; do echo "$name is ${user_ages[$name]} years old" done correctly declares an associative array with declare -A and assigns keys and values using ( [key]=value ) syntax.
  2. Step 2: Verify loop and output

    The loop uses ${!user_ages[@]} to get keys and prints each name with its age correctly.
  3. Final Answer:

    Option A script correctly adds and prints associative array entries -> Option A
  4. Quick Check:

    Use declare -A and [key]=value syntax for associative arrays [OK]
Hint: Use declare -A and [key]=value syntax for associative arrays [OK]
Common Mistakes:
  • Using declare -a which is for indexed arrays
  • Incorrect key-value syntax like colons or missing brackets
  • Looping over values instead of keys
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard