When defining, you can use quotes, but also escape spaces like "\ ". When referencing, double quotes keep the shell from splitting the variable's contents into several words at spaces.
No problem: would you please use CODE-tags when posting code? Thank you.
True. The problem is in the last line: your definition of "X" is ok, since the space is protected there (try removing the double quotes and you will get an error if you remove the escape "\" too). But when your script gets to the last line it first replaces "$X" with its contents and only then executes the line. This is "ls" is presented two parameters, separated by a space (which was no longer protected) the first and the second part of "$X". "ls" is fine with getting two paths, but these two paths, "/Library/Users/Application" and "Support/" do not exist, hence you get two errors, one for the first missing path and one for the second.