2017-10-29 4 views
1

私は3つの方法でスクリプトを実行しましたが、出力が異なっていました。ありがとう!! は、ここに私のスクリプト"echo"はshとbashで別の答えを出力します

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

であると私はのbash sh01.shのような./ bashのことでそれを実行している場合出力が

のHello Worldです!

私のようなSH のsh sh01.shを使用している場合しかし、それはHello Worldの-e

ようになります!

、ここでは、いくつかの他の情報である

  1. OS:Ubuntuの16.04.3
  2. 型のsh - >ダッシュ
+1

バッシュは、非常に拡張されたシェルです。これは、Bashが標準コマンドの拡張バージョンを追加できることを意味します。例えば、標準によれば*オプションの引数をとるだけです( '-e'ではありません)。詳細については、[この公式のPOSIXの 'echo'についての](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は(さえバッシュのechoは異なる挙動を示すことは非常に移植性がありませんBashのコンパイル時に異なるデフォルトオプションを使用する可能性のある別のOSで)。 printfを使用できます。 posixによれば:

-n(最初の引数として)および配列を省略しているエスケープ両方ない限り、すべてのPOSIXシステム間で移植性echoを使用することは不可能です。ダッシュは非常に基本的な標準に準拠しているシェルながら printfユーティリティはechoユーティリティの伝統的な動作をすべてエミュレートするために使用することができます[...]

+0

OS X v10.5が異なるオプションでコンパイルされた 'bash 'とともに出荷されたとき、' echo -n'を使ったスクリプトの束が壊れました。彼らは後の更新でそれを元に戻しましたが、代わりに 'printf'を使うように私のスクリプトを切り替えたのはいつか分かりません。 'printf'は' echo'より少し複雑ですが、* way *はより予測可能です。 –

+0

ありがとうございました!後で、私はnewgrpのようないくつかの似たような状況に遭遇し、ubuntuとOSXでは異なった動作をします。 TT。今私はなぜhhを持っている – Lincoln

関連する問題