按照我正在执行的shell脚本
#!/bin/sh
echo "Enter [y/n] : "
read opt
Run Code Online (Sandbox Code Playgroud)
它的输出是
Enter [y/n] :
Y
Run Code Online (Sandbox Code Playgroud)
我希望变量应该在同一行上读取,如下所示
Enter [y/n] : Y
Run Code Online (Sandbox Code Playgroud)
应该很简单我猜,但我是bash脚本的新手.
Ign*_*ams 42
解: read -p "Enter [y/n] : " opt
来自help read:
-p prompt output the string PROMPT without a trailing newline before
attempting to read
Run Code Online (Sandbox Code Playgroud)
Tay*_*nUB 38
shebang #!/bin/sh意味着您正在为历史Bourne shell编写代码(在我认为的某些系统上仍然可以找到),或者更有可能是POSIX定义的标准shell语言.这意味着read -p并且echo -n都不可靠.
标准/便携式解决方案是:
printf 'Enter [y/n] : '
read -r opt
Run Code Online (Sandbox Code Playgroud)
(-r防止特殊处理\,因为read通常在行尾处接受它作为行继续.)
如果您知道您的脚本将在具有Bash的系统上运行,则可以将shebang更改为#!/bin/bash(或#!/usr/bin/env bash)并使用所有花哨的Bash功能.(许多系统都有/bin/sh符号链接,bash因此它可以正常工作,但依赖于这是不好的做法,并且bash在名称下执行时实际上会禁用它自己的一些功能sh.)
echo -n "Enter [y/n] : " ; read opt
Run Code Online (Sandbox Code Playgroud)
要么!(后来更好)
read -p "[y/n]: " opt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40291 次 |
| 最近记录: |