`robots.txt` is _prefix matching_, so a rule like `Disallow: /?b=9` will block all URLs that _start_ `/?b=9`. Your URLs start `/shopp...` so they are not blocked.

However, you can use a `*` (wildcard) to represent the first part of the URL. This is an addition to the "standard", but the main search engine bots support it:

    Disallow /*/?b=9

The above should block `/shopping/books/?b=9` and `/<anything>/?b=9`.