2012-09-18 169 views
47

我想我的Ubuntu機器上運行一個bash script和它給我一個錯誤:Bash腳本錯誤:「function:not found」。爲什麼會出現?

function not found

爲了測試,我創建了下面的腳本,它工作在我的筆記本電腦卻沒有關於我的桌面罰款。任何想法爲什麼?我的筆記本電腦是一個mac,如果這是相關的。

#!/bin/bash 

function sayIt { 
    echo "hello world" 
} 

sayIt 

這將返回的 「hello world」 我的筆記本電腦,但在我的桌面,它返回:

run.sh: 3: function not found hello world run.sh: 5: Syntax error: "}" unexpected

任何幫助將非常感激。

回答

-3

它是否需要()函數名稱後,或在呼叫?

function sayIt() { ... 
} 

sayIt() 

? :)

嗯,其實,在我的Mac,它的工作原理就像你貼..

dtpwmbp:~ pwadas$ cat aa.sh 
#!/bin/bash 

function sayIt() { 
    echo "hello world" 
} 

sayIt 

dtpwmbp:~ pwadas$ ./aa.sh 
hello world 
dtpwmbp:~ pwadas$ 

比較bash的版本,AFAIR需要一些舊版本的 「()」 S。

dtpwmbp:~ pwadas$ bash --version 
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12) 
Copyright (C) 2007 Free Software Foundation, Inc. 
dtpwmbp:~ pwadas$ 

也比較禁用了javascript選項(男子bash)的狀態,在兩個炮彈,也許他們中的一個有一定COMPAT語法打開或關閉?不帶參數的「shopt」命令將列出支持的選項狀態。

What is the 'function' keyword used in some bash scripts?

+0

給了我一個:語法錯誤「(」意外 –

+0

可悲的是,我真的不知道爲什麼我對這個問題的答案downvoted:/ –

+0

您應該包括''在()函數的定義,但不當你調用函數 – Jacob

86

機會是您的桌面上,你實際上並沒有bash下運行,而是dash或其他一些POSIX兼容的外殼,不承認function關鍵字。 function關鍵字是bashism,bash擴展名。 POSIX語法不使用function並強制使用括號。

$ more a.sh 
#!/bin/sh 

function sayIt { 
    echo "hello world" 
} 

sayIt 
$ bash a.sh 
hello world 
$ dash a.sh 
a.sh: 3: function: not found 
hello world 
a.sh: 5: Syntax error: "}" unexpected 

的POSIX語法工作在兩個:

$ more b.sh 
#!/bin/sh 

sayIt() { 
    echo "hello world" 
} 

sayIt 
$ bash b.sh 
hello world 
$ dash b.sh 
hello world 
+0

https://wiki.ubuntu.com/DashAsBinSh –

+1

'功能'來自korn外殼,它在日期前bash。 – cdarke

+1

+1有這個確切的問題,但bash仍然會按預期執行。至少在你的解釋中,我知道**爲什麼**和**如何**! :) – Zuul

6

我面臨同樣的問題,我再修改語法,它爲我工作。嘗試刪除關鍵字功能添加括號()函數名後。

#!/bin/bash 

sayIt() 
{ 
    echo "hello world" 
} 

sayIt