Bash: 在命令行中保留带有空格的字符串输入?
问题的原因是当在没有用双引号括起来的情况下引用一个变量时,Shell会进行单词分割(将其分割成多个单词,每个空格或其他空白字符分割一次),以及通配符展开。解决方法是在引用变量时始终使用双引号(例如echo "$input"
)。
其次,read
会删除前导和尾随空格(即输入开头和/或结尾的空格)。如果在意这一点,可以使用IFS= read
(这实际上会清除空格的定义,因此不会删除任何内容)。您还可以使用read
的-r
("原始")选项,这样它就不会将行末的反斜杠解释为续行符号。
最后,我建议使用read
的-p
选项来提供提示(而不是echo -n
)。
做出所有这些更改后,以下是您的脚本的样子:
IFS= read -r -p "输入描述:" input echo "$input"
有时候更好的做法是指向常见问题解答(FAQ),而不是重新发明轮子。您可以参考mywiki.wooledge.org/BashPitfalls#read_.24foo和mywiki.wooledge.org/BashPitfalls#echo_.24foo。