与sh UsersInput.sh
相比,bash UsersInput.sh
如何提供不同的输出?
我的脚本如下:
#!/bin/bash
echo -n "Enter: ";
read usersinput;
echo "You entered, \"$usersinput\"";
的bash
localhost:Bash henry$ bash UsersInput.sh
Enter: input
You entered, "input"
SH
localhost:Bash henry$ sh UsersInput.sh
-n Enter:
input
You entered, "input"
为什么-n
对第一个表现正常,而第二个表现不正常?这是什么原因,是否有解决方法?
答案 0 :(得分:3)
来自man echo
:
某些shell可能提供内置的echo命令,该命令与此实用程序类似或相同。最值得注意的是,sh(1)中的内置回声不接受-n选项。请参阅builtin(1)手册页。
在bash中,Bourne-again shell,echo
接受-n
选项,而在sh中,Bourne shell,echo
不接受,所以它只是回应你写的所有内容,包括-n。
答案 1 :(得分:2)
/ bin / sh是OS X上的bash版本(不是Bourne shell)。它启用了POSIX模式,并且还有一个few other changes。其中一个是默认启用xpg_echo shell选项,以便内置echo符合POSIX。
http://pubs.opengroup.org/onlinepubs/009696799/utilities/echo.html:
实施不应支持任何选项
http://www.gnu.org/software/bash/manual/bash.html#Bash-POSIX-Mode:
44。启用xpg_echo选项后,Bash不会尝试将任何参数解释为echo作为选项。转换转义字符后,将显示每个参数。
[...]
如上所述,Bash要求启用xpg_echo选项以使echo builtin完全符合。
你可以取消设置xpg_echo,使用/ bin / echo,或者最好只使用printf:
sh -c 'shopt -u xpg_echo; echo -n aa'
sh -c '/bin/echo -n aa'
sh -c 'printf %s aa'