使用bash执行脚本时,“echo -n”工作正常,但sh不能

时间:2013-07-25 18:08:25

标签: macos bash echo

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对第一个表现正常,而第二个表现不正常?这是什么原因,是否有解决方法?

2 个答案:

答案 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'