You can delete an element from existing array though the whole process isn't very straightforward and may appear like a hack.
#!/bin/bash
list=( "one" "two" "three" "four" "five" )
var1="two"
var2="four"
printf "%s\n" "Before:"
for (( i=0; i<${#list[@]}; i++ )); do
printf "%s = %s\n" "$i" "${list[i]}";
done
for (( i=0; i<${#list[@]}; i++ )); do
if [[ ${list[i]} == $var1 || ${list[i]} == $var2 ]]; then
list=( "${list[@]:0:$i}" "${list[@]:$((i + 1))}" )
i=$((i - 1))
fi
done
printf "\n%s\n" "After:"
for (( i=0; i<${#list[@]}; i++ )); do
printf "%s = %s\n" "$i" "${list[i]}";
done
This script outputs:
Before:
0 = one
1 = two
2 = three
3 = four
4 = five
After:
0 = one
1 = three
2 = five
Key part of the script is:
list=( "${list[@]:0:$i}" "${list[@]:$((i + 1))}" )
Here we re-construct your existing array by specifying the index and length to remove the element from array completely and re-order the indices.