Если вы не против создания временных файлов, вы можете использовать метод cmp. С оболочкой Bourne вы довольно ограничены в том, что вы можете сделать. Я бы либо использовал zsh / bash, либо, если sh был необходим, написал бы программу на С, которая делала то, что я хочу.
Если о создании файлов каждый раз не может быть и речи, вы могли бы создать fifo, но это действительно ужасно и уродливо, не делайте этого!
mkfifo cmp1
mkfifo cmp2
echo "abcd" > cmp1 &
echo "abce" > cmp2 &
DIFF_CHARS=`cmp -l cmp1 cmp2 | wc -l`
Подстановка процессов в Bash или любой современной оболочке делает это тривиальным, и я определенно попытался бы использовать это.