Isso é realmente um pouco complicado. Quando você coloca seu comando entre aspas, você já escapa dos caracteres especiais da string.
Se a cadeia de caracteres for expandida quando você invocar a variável como comando, os caracteres de escape (automaticamente) escapados serão removidos do escape. Isso leva a esse comportamento inesperado porque todos os espaços em branco nessa sequência são interpretados da mesma maneira, mas devem ser interpretados de maneira diferente.
Isso pode ser conseguido colocando-se o comando e o caminho de arquivo em variáveis separadas e apenas a parte em que você tem que escapar dos espaços em branco:
#!/bin/bash
COMMAND="open -a"
APPPATH="/Applications/Google Chrome.app"
$COMMAND "$APPPATH"
Para sua edição:
OPEN_COMMAND="/usr/bin/open -a"
APPPATH="/Applications/Google Chrome.app"
...
$OPEN_COMMAND "$APPPATH" http://$VIRTUALHOST/