Bash:保留字符串,在命令行输入空格?

时间:2014-06-21 01:16:44

标签: string bash input

我想允许用空格捕获字符串,以便:

echo -n "Enter description: "
read input
echo $input

会产生:

> Enter description: My wonderful description!
> My wonderful description!

可能的?

1 个答案:

答案 0 :(得分:12)

需要担心的主要问题是,当你引用一个变量而不用双引号括起来时,shell会进行单词拆分(将其分成多个单词,无论那里有空格或其他空白字符),以及通配符扩展。解决方案:每当引用变量时都使用双引号(例如echo "$input")。

其次,read将修剪前导和尾随空格(即输入开头和/或末尾的空格)。如果您关心这一点,请使用IFS= read(这实际上消除了它对空格的定义,因此不会修剪任何内容)。您可能还想使用read' -r(" raw")选项,因此它不会尝试在行尾解释反斜杠作为一个延续角色。

最后,我建议使用read -p选项提供提示(而不是echo -n)。

通过所有这些更改,您的脚本如下所示:

IFS= read -r -p "Enter description: " input
echo "$input"