Is "special characters must be escaped" always true?

You do need to escape $ when it is used in a syntactically-valid environment variable name, regardless of whether or not it is set.

In the first case, $ is not followed by alphanumeric characters (it is followed by a space) and this is not a valid environment variable name – a variable must have at least one character in its name. Therefore, the $ is taken literally.

In the second case, $RECYCLE is a valid environment variable name even though it has no value. Therefore, $RECYCLE.BIN becomes .BIN when the empty value is substituted.

Consider instead:

find /tmp/somefiles | grep 'PATTERN' | sed 's/\$/$$/g' > /tmp/files_to_backup
2 Likes