Macos &引用;回声-n“;使用bash执行脚本时效果良好,但使用sh时效果不佳
为什么Macos &引用;回声-n“;使用bash执行脚本时效果良好,但使用sh时效果不佳,macos,bash,echo,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 输入:输入 您输入了“输入” sh localhost:Bash henry$sh UsersInput.sh -n输入: 输
sh UsersInput.sh
给出的输出与bash UsersInput.sh
不同
我的脚本如下:
#!/bin/bash
echo -n "Enter: ";
read usersinput;
echo "You entered, \"$usersinput\"";
bash
localhost:Bash henry$Bash UsersInput.sh
输入:输入
您输入了“输入”
sh
localhost:Bash henry$sh UsersInput.sh
-n输入:
输入
您输入了“输入”
为什么
-n
可以正确地处理第一个,而不能处理第二个?出现这种情况的原因是什么?是否有解决办法?来自《人类回声》(man echo):
某些shell可能提供与此实用程序类似或相同的内置echo命令。最值得注意的是,sh(1)中的内置echo不接受-n选项。请参阅内置(1)手册页面
在bash中,Bourne shell,
echo
接受-n
选项,而在sh中,Bourne shell,echo
不接受,因此它只是回显您编写的所有内容,包括来自man echo
的-n
某些shell可能提供与此实用程序类似或相同的内置echo命令。最值得注意的是,sh(1)中的内置echo不接受-n选项。请参阅内置(1)手册页面
在bash中,Bourne shell,
echo
接受-n
选项,而在sh中,Bourne shell,echo
不接受,因此它只是回显您编写的所有内容,包括-n。/bin/sh是OS X上bash的一个版本(不是Bourne shell)。它启用了POSIX模式,并且还具有一个。其中之一是默认启用xpg_echo shell选项,以便内置echo符合POSIX
:
实现不支持任何选项
:
44。启用xpg_echo选项时,Bash不会尝试将echo的任何参数解释为选项。转换转义字符后,将显示每个参数
[……]
如上所述,Bash要求启用xpg_echo选项,以使echo内置完全一致
您可以取消设置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'
/bin/sh是OSX上bash的一个版本(不是BourneShell)。它启用了POSIX模式,并且还具有一个。其中之一是默认启用xpg_echo shell选项,以便内置echo符合POSIX : 实现不支持任何选项 : 44。启用xpg_echo选项时,Bash不会尝试将echo的任何参数解释为选项。转换转义字符后,将显示每个参数 [……] 如上所述,Bash要求启用xpg_echo选项,以使echo内置完全一致 您可以取消设置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'
哪个贝壳是你的“sh”?/bin/sh指向什么?为了实现最大的可移植性,使用printf时不加换行:
printf“Enter:”
@glennjackman我将开始使用它。谢谢哪个贝壳是你的“sh”?/bin/sh指向什么?为了实现最大的可移植性,使用printf时不加换行:printf“Enter:”
@glennjackman我将开始使用它。谢谢谢谢你提供的信息。我将开始使用glenn建议的printf
。/bin/sh不是OS X上的Bourne shell。它是符合POSIX的bash版本。/bin/sh和/bin/bash二进制文件几乎相同,但大多数差异(包括echo的行为)取决于调用shell时使用的名称。感谢您提供的信息。我将开始使用glenn建议的printf
。/bin/sh不是OS X上的Bourne shell。它是符合POSIX的bash版本。/bin/sh和/bin/bash二进制文件几乎相同,但大多数差异(包括echo的行为)取决于调用shell时使用的名称。