From 5e82b09788cddced522b4f6bc459b5d0ecbc2588 Mon Sep 17 00:00:00 2001 From: Michael Diamond Date: Thu, 16 Dec 2021 12:46:09 -0800 Subject: [PATCH] Call out IFS= more prominently. --- SC2162.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/SC2162.md b/SC2162.md index 9fa45ca..1bce83a 100644 --- a/SC2162.md +++ b/SC2162.md @@ -14,6 +14,13 @@ echo "Enter name:" read -r name ``` +or + +```sh +echo "Enter name:" +IFS= read -r name +``` + ### Rationale: 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. @@ -24,7 +31,13 @@ Normally you just want to read data _including backslashes_ which are part of th > > If this option is given, backslash does not act as an escape character. -Note that [`read -r`](https://www.tldp.org/LDP/abs/html/internal.html#READR) will still strip leading and trailing spaces. `IFS="" read -r` prevents this. +#### 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 + +* [Bash FAQ 001](https://mywiki.wooledge.org/BashFAQ/001) ### Exceptions: