遵循我正在执行的shell脚本
#!/bin/sh
echo "Enter [y/n] : "
read opt
它的yields 是
Enter [y/n] :
Y
我希望变量应该在同一行上读取,如下所示
Enter [y/n] : Y
我想应该很简单,但我对bash脚本还不熟悉.
遵循我正在执行的shell脚本
#!/bin/sh
echo "Enter [y/n] : "
read opt
它的yields 是
Enter [y/n] :
Y
我希望变量应该在同一行上读取,如下所示
Enter [y/n] : Y
我想应该很简单,但我对bash脚本还不熟悉.
shebang #!/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
的名称执行时实际上禁用了它自己的一些功能.)