How can we get the union of two arrays in Bash? How can we get the union of two arrays in Bash? linux linux

How can we get the union of two arrays in Bash?


First, combine the arrays:

arr3=("${arr1[@]}" "${arr2[@]}")

Then, apply the solution from this post to deduplicate them:

# Declare an associative arraydeclare -A arr4# Store the values of arr3 in arr4 as keys.for k in "${arr3[@]}"; do arr4["$k"]=1; done# Extract the keys.arr5=("${!arr4[@]}")

This assumes bash 4+.


Prior to bash 4,

while read -r; do    arr+=("$REPLY")done < <( printf '%s\n' "${arr1[@]}" "${arr2[@]}" | sort -u )

sort -u performs a dup-free union on its input; the while loop just puts everything back in an array.