Tente:
a=()
for i in $VAR1; do
found=
for j in $VAR2; do
if [ $i == $j ]; then
found=1
break
fi
done
if [ ! $found ]; then
a+=($i)
fi
done
echo ${a[*]}
Em palavras: para cada i
em VAR1
, compare-a com todos os j
em VAR2
. Se nenhuma correspondência for encontrada, adicione i
à saída.
Esta versão está assumindo que os caracteres em VAR1
e VAR2
não estarão confundindo o shell. Além disso, é ineficiente em execução em tempo quadrático, mas talvez isso não seja uma preocupação.
Mais rápido, usando matrizes associativas :
declare -A a2
for k in $VAR2; do
a2[$k]=1
done
for k in $VAR1; do
if [ ! "${a2[$k]}" ]; then
echo $k
fi
done