Check if Array is Empty in Bash

When working with Bash scripts, you might encounter situations where you need to check if an array is empty or not.

There are two ways of knowing it:

if [[ -z "${array1[@]}" ]]; then

Here, you get all the elements of the array and use the string comparison to see if the resultant string is empty or not.

Alternatively. you can use:

if [ ${#array1[@]} -eq 0 ]; then

This time, we got the size of the array and test it with the number zero.

Let's see both methods with sample examples.

Check empty bash array with string comparison

We are going to use two elements to check if bash array is empty or not. One is ${#array[@]} and other is the -z operator.

Here, the ${#array[@]} is used in Bash for array expansion, allowing you to access all elements of an array. Don't confuse it with ${array[*]} which treats the entire array as a single string.

The -z operator on the other is used to test whether a string is empty.

Now, let's combine both of these and write a simple bash script:

#!/bin/bash

array1=('1' '23' '4' '56' '78' '9' '0')
array2=()

if [[ -z "${array1[@]}" ]]; then
  echo "array1 is empty"
else
  echo "array1 is not empty"
fi

if [[ -z "${array2[@]}" ]]; then
  echo "array2 is empty"
else
  echo "array2 is not empty"
fi

Here, I took two arrays: array1 which is filled with strings and array2 which is empty.

Later, I used the if-else twice to check each array. The first if statement will check for the array1 and the second one will verify the array2.

Once you execute the script, it will show you the following output:

Check empty bash array with size comparison

This method checks if the array size in bash is equal to zero or not using the test operator -eq.

#!/bin/bash

array1=('1' '23' '4' '56' '78' '9' '0')
array2=()

if [ ${#array1[@]} -eq 0 ]; then
  echo "array1 is empty"
else
  echo "array1 is not empty"
fi

if [ ${#array2[@]} -eq 0 ]; then
  echo "array2 is empty"
else
  echo "array2 is not empty"
fi

Notice what I did here? I simply compared the value of the array to zero and if it is true, then the array is empty and if not, then the array has some values.

Bonus: Using shortcuts with logical operators

This is the quickest way to check if the array is empty or not where you will be using the && operator with the -z operator and ${#array[@]}.

Here's the simple syntax where I have used the && operator with the echo command which will be executed if the value of -z "${array[@]}" is true:

#!/usr/bin/env bash

array=()

[[ -z "${array[@]}" ]] && echo "array is empty"

That's it!

Have any doubts? Leave us a comment 😄