2015-10-15 16 views
7

İki diziler, demek ettik:Bash'te iki dizinin birleşimini nasıl alabiliriz?

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

Ne Bash bu iki dizinin birliği almanın en iyi yolu olurdu?

+1

Gerçek birleştirme (dupes olmadan) veya basitçe her iki dizinin birleştirilmesi? –

+0

Gerçek sendika (çift kopyalar olmadan) – user2436428

+1

zsh'de, 'r türünde -U arr 'kullanabilirsiniz, oldukça bash içinde kolay bir yol olmadığından emin olabilirsiniz. – Kevin

cevap

9

Birincisi, kombine diziler:

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

Sonra onları tekilleştirme için this görevinden çözümü uygulayın:

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

Bu bash 4+ varsayar.

+3

'arr3' gerek yok:" $ {arr1 [@]} "" $ {arr2 [@]} "' da k için 'yi kullan –

2

öncesinde bash 4,

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

sort -u, girişinde bir DUP içermeyen birlik gerçekleştirir; while döngü, her şeyi bir diziye geri koyar.

İlgili konular