2016-10-12 7 views
0

スクリプトを入手する際に問題が発生しました。
誰かが間違っていたことを知っている場合は、共有してください。
私は含むscript.shを実行します。bashとPOSIXシェルのドットコマンドの違い

#!/bin/sh 
. preparing_script.sh # contents: func1(){ echo 'It works!' ; } 
func1 

それは何も出力しません。しかし、スクリプトを次のように変更すると、

#!/bin/bash 
. preparing_script.sh # contents: func1(){ echo 'It works!' ; } 
func1 

「それは機能します!」というメッセージが表示されます。
元のシェルは関数を提供しないことを意図していますか? または何か間違っていますか?

+0

script.shのmystery、setコマンドで関数func1!が表示されません。 – user3694243

+1

あなたのシステムで 'sh'となっているシェルはどんなシステムですか? – sorontar

答えて

3

function関数定義の前のキーワードは、POSIXで定義されていないbash -ismです。

だから、あなたがsh行(shebang #!/bin/sh)とそれを実行しているとき、それは働いていない((の構文エラーが表示されます)が、bash行(shebang #!/bin/bash)を使用すると、予想通りに動作します。

+1

実際、 'function'はkshから来ています。 – sorontar

+0

'ksh'では、キーワードの有無にかかわらず定義された関数の動作が多少異なります。 'bash'では、それはちょうど装飾です。 (私は 'bash'を部分的に採用して、部分的に読みやすくするために' ksh'コードの移植を容易にしました)。 – chepner

+0

キーワード "function"は問題ではなく、ディスク上の元のスクリプトにはありません。 functionキーワードは、dotコマンド(posixソース)に関するこの記事で明確にするためのものです。 – user3694243

関連する問題