片方の配列にあってもう片方にはないデータを見つける(bash)

両方の配列に含まれる項目を抜き出しそれを元に配列から取り除く
uniq -d は重複する行だけを表示し、uniq -u は重複しない行だけを表示する

#!/bin/sh
#array_diff.sh

array1=('Tokyo' 'Beijing' 'Washington D.C.' 'London' 'Paris')
array2=('Paris' 'Pusan' 'London' 'Kuala Lumpur' 'Tokyo' 'Canverra')

IFS=$'\n'

#両方の配列に含まれる項目を抜き出す
both=(`{ echo "${array1[*]}"; echo "${array2[*]}"; } | sort | uniq -d`)

#array1から重複部分を取り除くとarray1には含まれるが
#array2には含まれない項目を取り出せる
only1=(`{ echo "${array1[*]}"; echo "${both[*]}"; } | sort | uniq -u`)

echo "${only1[*]}"
$ ./array_diff.sh 
Beijing
Washington D.C.