Put the file names in an array and run through it manually with two loops.
You get each pairing only once if if _j < i_ where _i_ and _j_ are the indexes used in the outer and the inner loop, respectively.
$ touch a b c d
$ f=(*)
$ for ((i = 0; i < ${#f[@]}; i++)); do
for ((j = i + 1; j < ${#f[@]}; j++)); do
echo "${f[i]} - ${f[j]}";
done;
done
a - b
a - c
a - d
b - c
b - d
c - d