-rwill mangle backslashes.
echo "Enter name:" read name
echo "Enter name:" read -r name
echo "Enter name:" IFS= read -r name
read will interpret backslashes before spaces and line feeds (i.e. you can use backslashes in your string as an escape character). This is rarely expected or desired.
Normally you just want to read data including backslashes which are part of the input string and have no special escape meaning, which is what
read -r does. You should always use
-r unless you have a good reason not to:
If this option is given, backslash does not act as an escape character.
read -r, leading and trailing whitespace will be stripped from the input. Although this may sometimes be desirable or harmless it is often surprising and difficult to catch. Clearing the
IFS disables this behavior, so
IFS= read -r is generally safest.
If you want backslashes to affect field splitting and line terminators instead of being read, you can disable this message with a directive.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.