跟着我正在执行的shell脚本
#!/bin/sh echo "Enter [y/n] : " read opt
它的输出是
Enter [y/n] : Y
我希望这个variables应该像下面一样在同一行上读取
Enter [y/n] : Y
应该是简单的我猜,但我是新来的bash脚本。
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
实际上在以sh
名称执行时会禁用某些自己的功能。
解决方法: read -p "Enter [y/n] : " opt
从help read
:
-p prompt output the string PROMPT without a trailing newline before attempting to read
echo -n "Enter [y/n] : " ; read opt
要么! (后来更好)
read -p "[y/n]: " opt