SC2162 – ShellCheck Wiki

See this page on GitHub


read without -r will mangle backslashes.

Problematic code:

echo "Enter name:"
read name

Correct code:

echo "Enter name:"
read -r name


echo "Enter name:"
IFS= read -r name


By default, 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.

Trimming whitespace

Even with 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.

See Also


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.