An array in Bash is a list of values stored in a single variable. You can access each value by its position number, starting at zero.
Click to reveal answer
beginner
How do you write a simple for loop to iterate over all elements in a Bash array named fruits?
Use: for fruit in "${fruits[@]}"; do echo "$fruit" done This prints each fruit in the array one by one.
Click to reveal answer
beginner
What does ${array[@]} mean in Bash?
It means all elements of the array. When used in a loop, it lets you access each item one by one.
Click to reveal answer
beginner
How can you get the number of elements in a Bash array named colors?
Use ${#colors[@]}. It returns the count of items in the array.
Click to reveal answer
intermediate
Why is it important to quote "${array[@]}" when iterating over arrays in Bash?
Quoting preserves each element as a single item, even if it contains spaces. Without quotes, elements with spaces may split into multiple words.
Click to reveal answer
Which syntax correctly iterates over all elements in a Bash array named items?
Afor item in "${items[@]}"; do echo "$item"; done
Bfor item in ${items}; do echo "$item"; done
Cfor item in ${items[@]}; do echo $item; done
Dfor item in items; do echo "$item"; done
✗ Incorrect
Option A correctly uses quotes and ${items[@]} to iterate over all array elements safely.
How do you get the length of a Bash array named my_array?
A${#my_array[@]}
B${my_array.length}
Clength(my_array)
Dcount(my_array)
✗ Incorrect
In Bash, ${#array[@]} returns the number of elements in the array.
What happens if you forget to quote "${array[@]}" in a for loop?
AThe loop will not run
BElements with spaces may split into multiple words
CThe array will be empty
DIt causes a syntax error
✗ Incorrect
Without quotes, elements containing spaces split into separate words, causing unexpected behavior.
Which of these is a valid way to declare an array in Bash?
Aarray = {apple, banana, cherry}
Barray = [apple, banana, cherry]
Carray = (apple banana cherry)
Darray=(apple banana cherry)
✗ Incorrect
Option D uses the correct Bash syntax for array declaration.
How do you access the first element of a Bash array named list?
Alist[0]
B${list[1]}
C${list[0]}
Dlist(0)
✗ Incorrect
Bash arrays start at index 0, so ${list[0]} accesses the first element.
Explain how to iterate over all elements in a Bash array and print each element.
Think about how you loop over a list of items in real life, like reading names from a list.
You got /4 concepts.
Describe why quoting array expansions is important when iterating over arrays in Bash.
Imagine reading a list where some names have spaces, like 'New York'.
You got /3 concepts.
Practice
(1/5)
1. What is the correct way to iterate over all elements in a Bash array named fruits?
easy
A. for fruit in ${fruits[*]}; do echo "$fruit"; done
B. for fruit in ${fruits}; do echo "$fruit"; done
C. for fruit in "${fruits[@]}"; do echo "$fruit"; done
D. for fruit in fruits; do echo "$fruit"; done
Solution
Step 1: Understand array iteration syntax
In Bash, to iterate over all elements of an array safely, you use "${array[@]}" which expands each element as a separate word, preserving spaces.
Step 2: Check each option's correctness
for fruit in "${fruits[@]}"; do echo "$fruit"; done uses "${fruits[@]}" correctly. Options B and C omit quotes or use ${fruits} or ${fruits[*]} without quotes, which can break elements with spaces. for fruit in fruits; do echo "$fruit"; done treats fruits as a string, not an array.
Final Answer:
for fruit in "${fruits[@]}"; do echo "$fruit"; done -> Option C
Quick Check:
Use "${array[@]}" to iterate safely [OK]
Hint: Always quote "${array[@]}" to handle spaces safely [OK]
Common Mistakes:
Not quoting "${array[@]}" causing word splitting
Using ${array} instead of ${array[@]}
Iterating over the array name as a string
2. Which of the following is the correct syntax to iterate over an array colors in Bash?
easy
A. for color in colors; do echo $color; done
B. for color in ${colors}; do echo $color; done
C. for color in ${colors[@]}; do echo $color; done
D. for color in "${colors[@]}"; do echo $color; done
Solution
Step 1: Identify correct quoting for array iteration
To iterate over array elements safely, you must quote "${array[@]}" to preserve elements with spaces.
Step 2: Evaluate each option
for color in "${colors[@]}"; do echo $color; done correctly uses quotes around "${colors[@]}". for color in colors; do echo $color; done treats 'colors' as a string, not an array. for color in ${colors[@]}; do echo $color; done misses quotes, risking word splitting. for color in ${colors}; do echo $color; done uses ${colors} which is incorrect for arrays.
Final Answer:
for color in "${colors[@]}"; do echo $color; done -> Option D
Quick Check:
Quote "${array[@]}" for safe iteration [OK]
Hint: Quote "${array[@]}" to avoid splitting elements [OK]
Common Mistakes:
Forgetting quotes around "${array[@]}"
Using array name without $ or quotes
Using ${array} instead of ${array[@]}
3. What will be the output of the following Bash script?
names=("Alice" "Bob Smith" "Charlie")
for name in "${names[@]}"; do
echo "$name"
done
medium
A. Alice
Bob Smith
Charlie
B. Alice
Bob
Smith
Charlie
C. Alice Bob Smith Charlie
D. Syntax error
Solution
Step 1: Understand array elements and quoting
The array has three elements: "Alice", "Bob Smith", and "Charlie". Quoting "${names[@]}" preserves each element as one word, even if it contains spaces.
Step 2: Trace the loop output
The loop prints each element on its own line: first "Alice", then "Bob Smith", then "Charlie".
Final Answer:
Alice
Bob Smith
Charlie -> Option A
Quick Check:
Quoted "${array[@]}" keeps elements intact [OK]
Hint: Quoted "${array[@]}" keeps multi-word elements together [OK]
Common Mistakes:
Assuming elements split on spaces inside quotes
Using unquoted ${array[@]} causing word splitting
Expecting all elements on one line
4. Identify the error in this Bash script that tries to print all elements of array items:
items=("pen" "notebook" "eraser")
for i in ${items[@]}
do
echo $i
done
medium
A. Array declaration syntax is wrong
B. Missing quotes around ${items[@]} causes word splitting
C. for loop syntax is incorrect
D. echo command is missing quotes
Solution
Step 1: Check array declaration
The array declaration is correct with parentheses and quoted elements.
Step 2: Analyze the for loop iteration
The loop uses unquoted ${items[@]}, which causes word splitting. If any element had spaces, it would split incorrectly. Quoting "${items[@]}" fixes this.
Final Answer:
Missing quotes around ${items[@]} causes word splitting -> Option B
Quick Check:
Always quote "${array[@]}" to avoid splitting [OK]
Hint: Quote "${array[@]}" to prevent splitting elements [OK]
Common Mistakes:
Not quoting array expansion in loops
Assuming echo needs quotes for correctness here
Misreading array declaration syntax
5. You have a Bash array files containing filenames, some with spaces. You want to print only those filenames that contain the word "report". Which script correctly iterates and filters the array?
hard
A. for file in "${files[@]}"; do if [[ $file == *report* ]]; then echo "$file"; fi; done
B. for file in ${files[@]}; do if [[ $file == *report* ]]; then echo "$file"; fi; done
C. for file in "${files[*]}"; do if [[ $file == *report* ]]; then echo "$file"; fi; done
D. for file in files; do if [[ $file == *report* ]]; then echo "$file"; fi; done
Solution
Step 1: Choose correct array iteration with quoting
To handle filenames with spaces correctly, iterate using "${files[@]}" quoted. This preserves each filename as one item.
Step 2: Apply filtering condition inside loop
The condition [[ $file == *report* ]] correctly checks if the filename contains "report". for file in "${files[@]}"; do if [[ $file == *report* ]]; then echo "$file"; fi; done uses this with proper quoting and iteration.
Final Answer:
for file in "${files[@]}"; do if [[ $file == *report* ]]; then echo "$file"; fi; done -> Option A
Quick Check:
Quote "${array[@]}" and filter inside loop [OK]
Hint: Quote "${array[@]}" and filter inside loop with [[ ]] [OK]
Common Mistakes:
Using unquoted ${files[@]} splitting filenames
Using ${files[*]} which joins all elements into one string
Iterating over literal 'files' string
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.