2017-10-29 113 views
1

我用三種方式運行我的腳本,輸出是不同的,你能向我解釋爲什麼它的工作原理是這樣嗎?謝謝!! 這裏是我的腳本「回聲」通過sh和bash輸出不同的答案

#!/bin/bash 
#Program: 
#  This program shows "Hello World!" in your screen. 
echo -e "Hello World! \a\n" 
exit 0 

如果我被Bash運行它,並./像慶典sh01.sh輸出

的Hello World!

不過,如果我使用的是sh像SH sh01.sh它會像

-e世界,你好!

,這裏是一些其他的信息

  1. 操作系統:Ubuntu的16.04.3
  2. 型SH - >破折號
+1

擊是一個非常擴展的外殼,而短劃線是一個非常基本的和符合標準的外殼。這意味着Bash可以添加標準命令的擴展版本,比如'echo',根據標準,它只需要*一個*可選參數(而不是'-e')。有關更多信息,請參閱[有關'echo'的官方POSIX參考資料](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html)。 –

+0

相關:https://stackoverflow.com/questions/35603323/bash-different-between-printf-and-echo – codeforester

+0

我明白了,謝謝! – Lincoln

回答

1

echo不是很便攜(甚至bash的echo的行爲可能不同在編譯Bash時可能使用不同默認選項的不同操作系統)。您可以使用printf。根據posix

這是不可能使用echo便攜跨所有POSIX系統,除非兩個-n(作爲第一個參數)和逸出省略序列。 該printf實用程序可便攜地用於模擬任何echo實用程序的傳統行爲[...]

+0

是的,當使用'bash'裝載的OS X v10.5使用不同選項編譯時,一些使用'echo -n'的腳本中斷了。他們在稍後的更新中將它切換回來,但我不知道到底是什麼時候,因爲我已將所有腳本切換爲使用「printf」。 'printf'比'echo'複雜一些,但*方式*更具可預測性。 –

+0

謝謝!後來,我又遇到了一些類似的情況,像newgrp,在Ubuntu和OSX中表現不同。 TT。現在我有爲什麼...... – Lincoln