Check if an Element Exists in an Array in Bash

Published: Sep 21, 2021
Updated: Feb 16, 2024

Why didn’t I just use Node.js or Python? Hey, you’re getting distracted. That’s not what this post is about. Just enjoy how hard someone else had to work to achieve this in Bash.

Snippet #

element_exists_in_array() {
    local usage="\
Usage:
  ${FUNCNAME[0]} <element_to_find> <array>
Sample:
  ${FUNCNAME[0]} \"dog\" \"\${animals[@]}\"
Where <element_to_find> is the element to find.
Where <array> is the array to search."

  if [[ ${#} -lt 2 ]]; then
    echo -e "${usage}"
    return 1
  fi

  local element_to_find="${1}"
  shift
  local array=("${@}")

  for element in "${array[@]}"; do
    if [[ "${element_to_find}" == "${element}" ]]; then
      return 0
    fi
  done

  return 1
}

Usage #

animals=(
  "dog"
  "lizard"
  "frog"
)

if element_exists_in_array "dog" "${animals[@]}"; then
  echo "It exists :)"
else
  echo "It doesn't exist :("
fi