In pattern matching, you can to protect special characters with backslashes. Letters, digits and non-ASCII characters never need backslashes.
Here is a list of characters that may need to be escaped when using a typical shell (ksh, bash or zsh).
!
history expansion.
"
shell syntax.
#
comment start when preceded by whitespace; zsh wildcards.
$
shell syntax.
&
shell syntax.
'
shell syntax.
(
even in the middle of a word.
)
(see (
)
*
shell wildcard.
,
only inside brace expansion.
;
shell syntax.
<
shell syntax.
=
in zsh, when it’s at the beginning of a file name.
>
shell syntax.
?
shell wildcard.
[
shell wildcard.
\
shell syntax ‘escape’ character.
]
you might get away with leaving it unquoted.
^
history expansion; zsh wildcard.
`
shell syntax.
{
brace expansion.
|
shell syntax.
}
needs to be escaped in zsh, other shells are more lenient.
~
home directory expansion
A few more characters can require special handling sometimes:
-
isn’t special for the shell, but when it’s at the beginning of a command argument, it indicates an option. It can’t be protected with quotes since the special handling is in the command, not in the shell.
.
isn’t special in itself, but dot files are excluded from *
expansions by default.
:
isn’t special for the shell, but some commands parse it specially, e.g. to indicate a remote file (hostname:filename).
* This page is derived from a post on Stack Exchange.