2015-10-15 5 views
7

Ich habe zwei Arrays, sagen:Wie können wir die Vereinigung von zwei Arrays in Bash bekommen?

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

Was ist der beste Weg wäre, Vereinigung dieser beiden Arrays in Bash zu bekommen?

+1

Aktuelle Union (ohne Dupes) oder einfach beide Arrays verkettet? –

+0

Aktuelle Union (ohne Duplikate) – user2436428

+1

In zsh können Sie einfach 'typeset -U arr' verwenden, ziemlich sicher, dass es nicht so einfach in Bash ist. – Kevin

Antwort

9

Zuerst kombinieren die Arrays:

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

Dann wenden Sie die Lösung von this Beitrag sie dedupliziert:

# 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[@]}") 

Dies setzt voraus, bash 4+.

+3

Keine Notwendigkeit für 'arr3': Verwenden Sie einfach' für k in "$ {arr1 [@]}" "$ {arr2 [@]}" ' –

2

Vor bash 4,

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

sort -u führt eine dup freie Vereinigung an ihrem Eingang; Die while Schleife legt alles einfach in ein Array zurück.

Verwandte Themen