我想允许用空格捕获字符串,以便:
echo -n "Enter description: "
read input
echo $input
会产生:
> Enter description: My wonderful description!
> My wonderful description!
可能的?
答案 0 :(得分:12)
需要担心的主要问题是,当你引用一个变量而不用双引号括起来时,shell会进行单词拆分(将其分成多个单词,无论那里有空格或其他空白字符),以及通配符扩展。解决方案:每当引用变量时都使用双引号(例如echo "$input"
)。
其次,read
将修剪前导和尾随空格(即输入开头和/或末尾的空格)。如果您关心这一点,请使用IFS= read
(这实际上消除了它对空格的定义,因此不会修剪任何内容)。您可能还想使用read
' -r
(" raw")选项,因此它不会尝试在行尾解释反斜杠作为一个延续角色。
最后,我建议使用read
-p
选项提供提示(而不是echo -n
)。
通过所有这些更改,您的脚本如下所示:
IFS= read -r -p "Enter description: " input
echo "$input"