Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell脚本,在回显消息后在同一行上读取_Linux_Bash_Shell - Fatal编程技术网

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

Linux Shell脚本,在回显消息后在同一行上读取,linux,bash,shell,Linux,Bash,Shell,遵循我正在执行的shell脚本 #!/bin/sh echo "Enter [y/n] : " read opt 它的产量是 Enter [y/n] : Y 我希望变量应该在同一行上读取,如下所示 Enter [y/n] : Y 我想应该很简单,但我对bash脚本还不熟悉 解决方案:read-p“输入[y/n]:”opt 从帮助阅读: -p prompt output the string PROMPT without a trailing newline before

遵循我正在执行的shell脚本

#!/bin/sh

echo "Enter [y/n] : "
read opt
它的产量是

Enter [y/n] : 
Y
我希望变量应该在同一行上读取,如下所示

Enter [y/n] : Y
我想应该很简单,但我对bash脚本还不熟悉

解决方案:
read-p“输入[y/n]:”opt

帮助阅读

  -p prompt output the string PROMPT without a trailing newline before
        attempting to read
或者!(晚一点比较好)

舍邦
#/bin/sh
意味着您正在为历史上的Bourne shell(我认为在Solaris等系统上仍然可以找到)编写代码,或者更可能是为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
在名为
sh
的情况下执行时实际上禁用了它自己的一些功能)

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

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

@Aaron谢谢你格式化这篇文章。这是我的第一篇文章。我会确保我的其他帖子格式正确。这是一个很好的解释。我在RHEL 5.5 BTW上。
printf 'Enter [y/n] : '
read -r opt
echo -n "Enter [y/n] : "
read opt