Appending to Arrays in Bash

Unlike many programming languages, bash doesn't have any pre-built function that lets you append data to arrays in bash.

But this doesn't mean it can't be done.

And in this tutorial, I will show you two ways to append to an array in bash:

  • Using the shorthand operator (allows you to append multiple elements)
  • By defining the last index

Append to array using += in bash

The shorthand operator (+=) is the easiest way to append to an array in bash, and it can be used in the following manner:

Array+=("Data to append")

For example, I want to work with an array named arrVar which contains the following:

arrVar=("Ubuntu" "Debian" "openSUSE" "Fedora" "Void" "Gentoo")

And I want to append one more value Arch to the existing array, so my script would look like this:

#!/bin/bash

#Main Array to work with
arrVar=("Ubuntu" "Debian" "openSUSE" "Fedora" "Void" "Gentoo")

#Value that needs to be appended
arrVar+=("Arch")

To print the values, I will be using a simple for loop in bash that will print the value of arrVar one by one in each iteration:

#!/bin/bash

#Main Array to work with
arrVar=("Ubuntu" "Debian" "openSUSE" "Fedora" "Void" "Gentoo")

#Value that needs to be appended
arrVar+=("Arch")


#Printing the values of an array
for value in "${arrVar[@]}"
do
     echo $value
done

To run the script, make it executable using the chmod command.

Finally, execute the script:

Append to multiple arrays in bash

If you want to append multiple elements, you can add more data as shown:

my_array+=("element1" "element2" "element3")

For example, here, I added 3 more elements (names of distros):

arrVar+=("Pop_OS" "Linux_Mint" "Zorin")

And when executed, it gave me the following results:

A convenient way to append elements. Isn't it?

Append to array to bash by defining the last index

This is yet another simple way to append to an array in bash, where you will be adding data to the last index.

But how are you supposed to find the last index? I know if you have a small array, it can be done manually, but what about the times when dealing with 100s or 1000s of data entries?

In that case, you can use # and @in the following manner:

array_name[${#array_name[@]}]="Data to append"

For example, if I want to add Slackware to the array named arrVar, then, my bash argument would look like this:

arrVar[${#arrVar[@]}]="Slackware"

And this is how my script would look like:

#!/bin/bash

#Main Array to work with
arrVar=("Ubuntu" "Debian" "openSUSE" "Fedora" "Void" "Gentoo")

#Value that needs to be appended
arrVar[${#arrVar[@]}]="Slackware"

#Printing the values of an array
for value in "${arrVar[@]}"
do
     echo $value
done

Now, if I execute the above script, the Slackware should be the last entry in the output:

Pretty cool. Isn't it?

Learn bash scripting for free

If you are just getting started with the bash, we have a dedicated series of tutorials on bash that would help you a lot to get the basics right:

Bash Tutorial Series for Beginners: Start Learning Bash Scripting
The 10 chapter series will teach the bash scripting essentials.

I hope you'd no longer find appending to array in bash a challenging task.