Arrays in BASH


Arrays

Arrays is another hidden gem in BASH. BASH uses normal paranthesis to denote the start and end of arrays and a space signals the start of the next item:

fruit_array=("apples" "oranges" "bananas" "peaches" "papayas")

Iterating an array using indexes

Iterating using an index isn't that much different from C style languages. The unusual bit, is the double parenthesises and the extravagant reading of the array length:

for (( i = 0; i < ${#fruit_array[@]}; i++ )); do
  echo $i "="  ${fruit_array[$i]}
done

Iterating an array without an index

If you don't need the index variable, you can also just iterate through the array values like this:

for fruit in ${fruit_array[@]}; do
  echo $fruit
done

Starting iterating on a specified index in the array

If you wish to address just a sub set of the array, you can add the indexes inside the curly braces. Here, I start iterating from the second item of the array:

for fruit in ${fruit_array[@]:1}; do
  echo $fruit "(skipped the first one)"
done

Whereas here, I only want the the middle two fruits:

for fruit in ${fruit_array[@]:1:3}; do
  echo $fruit "(skipped the first and last ones)"
done

Creating an array of files

Often, you find yourself wanting a set of files into an array. This is easy,. simply do the following to get all tar.gz files in an array:

tarballs=($(ls /my/dir/*.tar.gz))

Licensed under CC BY Creative Commons License ~ ✉ torstein.k.johansen @ gmail ~ 🐘 @skybert@emacs.ch ~ 🐦 @torsteinkrause