简体   繁体   中英

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

I've two arrays, say:

arr1=("one" "two" "three")
arr2=("two" "four" "six")

What would be the best way to get union of these two arrays in Bash?

First, combine the arrays:

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

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

# Declare an associative array
declare -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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM