【问题标题】:Bash: preserve string with spaces input on command line? [duplicate]Bash:在命令行上保留带有空格输入的字符串? [复制]
【发布时间】:2023-03-28 14:51:01
【问题描述】:

我想允许用空格捕获字符串,这样:

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

会产生:

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

可能吗?

【问题讨论】:

  • 它在您的系统上产生了什么?您可能应该引用"$input",但不清楚您看到的是什么错误。
  • 哦,是的,谢谢,我没有收到错误,但字符串在第一个空格处被分割。 "$input",这很有帮助!

标签: string bash input


【解决方案1】:

主要需要担心的是,当您引用一个变量而不用双引号括起来时,shell 会进行分词(将其拆分为多个词,只要有空格或其他空白字符),以及通配符扩张。解决方案:在引用变量时使用双引号(例如echo "$input")。

其次,read 将修剪前导和尾随空格(即输入开头和/或结尾的空格)。如果您关心这一点,请使用IFS= read(这基本上消除了其对空白的定义,因此没有任何内容被修剪)。您可能还想使用read-r ("raw") 选项,因此它不会尝试将行尾的反斜杠解释为连续字符。

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

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

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

【讨论】:

猜你喜欢
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2014-07-18
相关资源
最近更新 更多