按照我正在执行的shell脚本
#!/bin/sh
echo "Enter [y/n] : "
read opt
它的输出是
Enter [y/n] :
Y
我希望变量应该在同一行上读取,如下所示
Enter [y/n] : Y
我想应该很简单,但我是bash脚本新手。
答案 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 -p
和echo -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>