How do I add a line break for read command?

 read -p "Please Enter a Message:" message

How can I add a line break after Message:?


Just looking for the exact same thing. You can use:

# -r and -e options are unrelated to the answer.
read -rep $'Please Enter a Message:\n' message

And it will work exactly as asked:

Please enter a Message:
_

Here is an extract from the bash manpage explaining it:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:

  • (...)
  • \n new line
  • (...)

The expanded result is single-quoted, as if the dollar sign had not been present.

Took me a while to find out.

Note that single quotes and double quotes behave differently in this regard:

A double-quoted string preceded by a dollar sign ($) will cause the string to be translated according to the current locale. If the cur- rent locale is C or POSIX, the dollar sign is ignored. If the string is translated and replaced, the replacement is double-quoted.


I like Huang F. Lei's answer, but if you don't like the literal line break, this works:

read -p "Please Enter a Message: `echo $'\n> '`" message

Shows:

Please Enter a Message:
> _

...where _ is where the cursor ends up. Note that since trailing newlines are usually dropped during command substitution, I've included the > afterward. But actually, your original question doesn't seem to want that prompt bit, so:

# Get a carriage return into `cr` -- there *has* to be a better way to do this
cr=`echo $'\n.'`
cr=${cr%.}

# Use it
read -p "Please Enter a Message: $cr" message

Shows

Please Enter a Message:
_

There has to be a better way, though.


Here's an improvement on the accepted answer that doesn't require spawning a subshell:

read -p "Please Enter a Message:"$'\n' message

From the GNU Bash reference manual:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard.