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

时间:2012-03-15 12:57:15

标签: linux bash shell

按照我正在执行的shell脚本

#!/bin/sh

echo "Enter [y/n] : "
read opt

它的输出是

Enter [y/n] : 
Y

我希望变量应该在同一行上读取,如下所示

Enter [y/n] : Y

我想应该很简单,但我是bash脚本新手。

5 个答案:

答案 0 :(得分:38)

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

来自help read

  -p prompt output the string PROMPT without a trailing newline before
        attempting to read

答案 1 :(得分:35)

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实际上在以{{名称}执行时禁用了一些自己的功能。 1}}。)

答案 2 :(得分:7)

echo -n "Enter [y/n] : " ; read opt

OR! (后来更好)

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

答案 3 :(得分:1)

在 echo 中使用 -n 句柄,这将避免尾随换行

echo -n "Enter [y/n] : "
read opt

答案 4 :(得分:0)

只需使用此命令echo -n <command>