Shell脚本,在回显消息后在同一行上读取

跟着我正在执行的shell脚本

#!/bin/sh echo "Enter [y/n] : " read opt 

它的输出是

 Enter [y/n] : Y 

我希望这个variables应该像下面一样在同一行上读取

 Enter [y/n] : Y 

应该是简单的我猜,但我是新来的bash脚本。

shebang #!/bin/sh意味着你正在为历史上的Bourne shell编写代码(在我认为的某些系统上仍然可以找到),或者更可能的是POSIX定义的标准shell语言。 这意味着read -pecho -n都是不可靠的。

标准/便携式解决方案是:

 printf 'Enter [y/n] : ' read -r opt 

-r防止\的特殊处理,因为read在一行的最后通常接受它作为连续行)。

如果您知道您的脚本将在具有Bash的系统上运行,您可以将shebang更改为#!/bin/bash (或#!/usr/bin/env bash )并使用所有的Bash功能。 (许多系统将/bin/sh符号链接到bash所以它可以以任何方式工作,但是依赖于这种做法是不好的做法,而bash实际上在以sh名称执行时会禁用某些自己的功能。

解决方法: read -p "Enter [y/n] : " opt

help read

  -p prompt output the string PROMPT without a trailing newline before attempting to read 
 echo -n "Enter [y/n] : " ; read opt 

要么! (后来更好)

 read -p "[y/n]: " opt