如何为读命令添加换行符?

read -p "Please Enter a Message:" message 

如何在Message:之后添加换行符?

Solutions Collecting From Web of "如何为读命令添加换行符?"

我喜欢Huang F. Lei的回答 ,但是如果你不喜欢字面的换行符,

 read -p "Please Enter a Message: `echo $'\n> '`" message 

显示:

 请输入留言:
 > _ 

…其中_是光标结束的地方。 请注意,由于尾随的换行符通常在命令替换期间被删除,所以我在后面加入了。 但实际上,你原来的问题似乎并不需要那个提示,所以:

 # Get a carriage return into `cr` -- there *has* to be a better way to do this cr=`echo $'\n.'` cr=${cr%.} # Use it read -p "Please Enter a Message: $cr" message 

展会

 请输入留言:
 _ 

不过,还有更好的办法。

只是寻找完全相同的东西。 您可以使用:

 # -r and -e options are unrelated to the answer. read -rep $'Please Enter a Message:\n' message 

它会按照问题的方式工作:

 Please enter a Message: _ 

这里是从bash manpage解释它的摘录:

$'string'形式的单词被特殊处理。 字扩展为字符串,反斜杠转义字符被ANSI C标准指定。 反斜杠转义序列(如果存在)按如下方式解码:

  • (……)
  • \ n新行
  • (……)

扩大的结果是单引号的,好像美元符号不存在。

花了我一会儿才知道。

请注意,单引号和双引号在这方面表现不同:

以美元符号($)开头的双引号字符串将导致根据当前语言环境翻译字符串。 如果当前的语言环境是C或POSIX,美元符号将被忽略。 如果字符串被翻译和替换,替换是双引号。

 $ read -p "Please Enter a Message: > " message Please Enter a Message: 

直接在“:”和“”之间输入“换行符”。

只是为了改善黄F磊和我喜欢的TJ Crowder的答案(并且加了+1)。你也可以使用下面的语法之一,它们基本上是一样的,这取决于你的口味(我更喜欢第一):

 read -p "$(echo -e 'Please Enter a Message: \n\b')" message read -p "`echo -e 'Please Enter a Message: \n\b'`" message 

这两者将产生以下输出:

 Please Enter a Message: _ 

其中_是游标。
如果你需要在字符串的任何部分换行,但最后,你可以使用\n ,例如

 read -p "`echo -e '\nPlease Enter\na Message: '`" message 

会产生

 . Please Enter a Message: _ 

哪里。 是一个空白的第一个新行,_是光标。

只有添加最后的换行符,你必须使用\n\b就像我的第一个例子

bash manpage:

 -p prompt Display prompt on standard error, without a trailing new- line, before attempting to read any input. The prompt is displayed only if input is coming from a terminal. 

所以,不要自己read ,并在消息字符串\n回声\n 。 答案应该很简单 – 不要read显示提示:

 echo "Please Enter a Message:" 1>&2 read message 

以下是对不需要产生子shell的接受答案的改进:

 read -p "Please Enter a Message:"$'\n' message 

从GNU Bash参考手册 :

$'string'形式的单词被特殊处理。 字扩展为字符串 ,反斜杠转义字符被ANSI C标准指定。

read -p "Please Enter a Message: 返回 " message