Bash: 在命令行中保留带有空格的字符串输入?

6 浏览
0 Comments

Bash: 在命令行中保留带有空格的字符串输入?

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

echo -n "请输入描述:"
read input
echo $input

将产生:

> 请输入描述:我美妙的描述!
> 我美妙的描述!

可行吗?

0
0 Comments

问题的原因是当在没有用双引号括起来的情况下引用一个变量时,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_.24foomywiki.wooledge.org/BashPitfalls#echo_.24foo

0