Eu acho que a pergunta é por que read -d '' funciona apesar de read -d'' não.
O problema não tem nada a ver com read , mas é um "problema" de citação. Um "" / '' que faz parte de uma string (word) simplesmente não é reconhecido. Deixe o shell mostrar o que você vê / executa:
start cmd:> set -x
start cmd:> echo read -d " " foo
+ echo read -d ' ' foo
start cmd:> echo read -d" " foo
+ echo read '-d ' foo
start cmd:> echo read -d "" foo
+ echo read -d '' foo
start cmd:> echo read -d"" foo
+ echo read -d foo