< Why some file names cause trouble >
You can have weird file names on your Linux system if you want. For example, nothing prevents you from having spaces in a file name. You can also use some strange characters in a file name, like &, *, \, $, and ? . The problems start when you try to use these file names at the command line.
You see, when you type commands at the prompt, spaces are often used for separating different commands, the command's arguments, or different files. The shell doesn't know that the bunch of text that follows your command is in fact one single file name. However, there's an easy way to tell the shell that the bunch of text is just one file name, so having spaces in a file name usually isn't a big problem.
A more problematic thing is special characters in file names. There are some characters that have a special meaning to the bash shell. For example, * and ? are wildcards and $ means a variable. If you can avoid using these characters in normal file names, do avoid it. If you have no idea what are wildcards or why $ means a variable, you have even more reasons to avoid these characters in normal file names!
Anyway, if you have files with spaces or special characters in their names, you have two ways of dealing with them: quoting the file name or escaping the confusing characters.