Se você não quiser percorrer cada entrada da segunda matriz para cada valor na primeira, precisará usar uma matriz associativa. No awk você poderia fazer isso:
$ a=(a b c d);
$ b=(a h c d l k);
$ awk 'BEGIN{RS = FS} NR == FNR {a[$1] = 1; next} $1 in a' \
<(echo "${a[*]}") <(echo "${b[*]}")
a
c
d
O bash puro se pareceria com algo assim (embora seja um pouco pesado.
declare -A a
a=([a]=1 [b]=1 [c]=1 [d]=1)
declare -A b
b=([a]=1 [h]=1 [c]=1 [d]=1 [l]=1 [k]=1)
for i in ${!a[*]}; do
if [ ! -z "${b[$i]}" ]; then
echo "$i is in both";
fi;
done