I'd like to allow a string to be captured with spaces, so that:
echo -n "Enter description: "
read input
echo $input
Would produce:
> Enter description: My wonderful description!
> My wonderful description!
Possible?
I'd like to allow a string to be captured with spaces, so that:
echo -n "Enter description: "
read input
echo $input
Would produce:
> Enter description: My wonderful description!
> My wonderful description!
Possible?
The main thing to worry about is that when you refer to a variable without enclosing it in double-quotes, the shell does word splitting (splits it into multiple words wherever there's a space or other whitespace character), as well as wildcard expansion. Solution: use double-quotes whenever you refer to a variable (e.g. echo "$input"
).
Second, read
will trim leading and trailing whitespace (i.e. spaces at the beginning and/or end of the input). If you care about this, use IFS= read
(this essentially wipes out its definition of whitespace, so nothing gets trimmed). You might also want to use read
's -r
("raw") option, so it doesn't try to interpret backslash at the end of a line as a continuation character.
Finally, I'd recommend using read
's -p
option to supply the prompt (instead of echo -n
).
With all of these changes, here's what your script looks like:
IFS= read -r -p "Enter description: " input
echo "$input"