Yes, you are right. It seems '#' is a special character to the shell, so it has to be escaped to be passed to XBoard at all. The double quote of course is special to the shell, and protects other stuff that is between those from being interpreted as special. But an unexpected feature of the shell is that when there is nothing between the quotes, it does not consider it a null-string argument, but is removes the argument altogether from the argument list. So passing an empty string on the command line does not work.
For the texture files there is the alternative to give "*" as an argument, as names starting with an asterisk are ignored. This was a feature in Winboard_x, to quickly disable the texture, without losing the filename, when editing the settings file. You could then simple prefix an asterisk, and delete it later. It would have been neater if there had been a separate Boolean option to enable the textures, like
-texture true|false; then you could disable them from the command line without losing the filenames. Perhaps I will add such an option.
None of these problems with quotes and # occur when XBoard reads them directy from a settings file, as there is no intervention of the shell in that case. So editing the ~/.xboardrc file, that already has all these options in them (so you would only have to alter the values) remains possible, and is less tricky (but more cumbersome).
Note that the new XBoard alpha version from the "popups" branch of the hgm.nubati.net repository has menu dialogs with items for all these options (pixmap directories, square colors, board textures in the "View -> Board..." dialog, for instance). See
http://hgm.nubati.net/news.html for a description.