From dwheeler.com:
Traditionally, Unix/Linux/POSIX filenames and pathnames can be almost any sequence of bytes. Unfortunately, most developers and users of Bourne shells (including bash, dash, ash, and ksh) don't handle filenames and pathnames correctly. Even good textbooks on shell programming and many examples in the POSIX standard, get filename and pathname processing completely wrong.