>>169
zshは空白無くても動く

zsh -c 'foo(){echo test;};foo
test

dashはコンパイルエラー起こらないと思いつつ、実行するとエラーになり
dash -c 'foo(){echo test;}' # コンパイルエラー起こらない
dash -c 'foo(){echo test;};foo' # でも実行すると怒られる

実は"最後の" ; がおかしい
dash -c 'foo(){echo test;} foo' # これを実行するとこうなる
{echo: not found

エラー内容から、最初の { がおかしい事がわかる。これが正解
dash -c 'foo()echo test;} foo'
test

後ろの } はただのノイズだと思われるので、とってあげても動く
dash -c 'foo()echo test; foo'

↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
でもbashやyashでは動かない

そこから考えると
dash -c 'foo()echo test;foo' は動くということがわかるし、
dash -c 'foo()echo test;}foo' は
foo()echo test +}foo になるので、 }foo: not found と表示されることも理解できる