2013-07-25 45 views
2

爲什麼sh UsersInput.sh給人相比bash UsersInput.sh不同的輸出?「回聲-n」使用bash執行腳本時,工作正常,但不能與SH

我的腳本如下:

#!/bin/bash 
echo -n "Enter: "; 
read usersinput; 
echo "You entered, \"$usersinput\""; 

慶典

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與第一正常行爲,但不與SE條件?這是什麼原因,是否有解決方法?

+3

其外殼是你的 「SH」?/bin/sh指向什麼?爲了最大的可移植性,用printf不換行:'printf的「輸入:」' –

+0

@glennjackman我將開始使用它。謝謝! – Dev

回答

3

man echo

某些殼可以提供內建的echo命令,其類似於或相同於該實用程序。最值得注意的是,sh(1)中的內建回聲不接受-n選項。請參閱內置(1)手冊頁。

在bash中的Bourne Again Shell的,echo接受-n選項,而在SH,Bourne shell的echo沒有,所以它只是回聲你寫的所有內容,包括-n。

+1

感謝您的信息。正如glenn所建議的那樣,我將開始使用'printf'。 – Dev

+1

/bin/sh的是不是一個Bourne在OS X上殼,是慶典的POSIX符合的版本。的/ bin/sh的和/斌/慶典二進制幾乎是相同的,但大多數的差異(包括回波的行爲)取決於殼被調用的名稱。 – user495470

2

/bin/sh的是bash的對OS X的版本(不是一個Bourne shell),它啓用了POSIX模式,並具有few other changes爲好。其中之一是,xpg_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選項啓用,擊不試圖解釋任何參數作爲選項回顯。在轉義字符轉換後顯示每個參數。

[...]

如上所述,猛砸需要啓用了迴音內置是完全符合的xpg_echo選項。

可以取消設置xpg_echo,使用/ bin /回聲,或最好只是用printf:

sh -c 'shopt -u xpg_echo; echo -n aa' 
sh -c '/bin/echo -n aa' 
sh -c 'printf %s aa'