2011-06-14 38 views
9

出於某種原因,這個功能是否工作正常,終端輸出的bash語法錯誤: 「(」 意外

newbootstrap.sh: 2: Syntax error: "(" unexpected 

這裏是我的代碼(2號線是功能MoveToTarget() {

#!/bin/bash 
function MoveToTarget() { 
    #This takes to 2 arguments: source and target 
    cp -r -f "$1" "$2" 
    rm -r -f "$1" 
} 

function WaitForProcessToEnd() { 
    #This takes 1 argument. The PID to wait for 
    #Unlike the AutoIt version, this sleeps 1 second 
    while [ $(kill -0 "$1") ]; do 
      sleep 1 
    done 
} 

function RunApplication() { 
    #This takes 1 application, the path to the thing to execute 
    exec "$1" 
} 

#our main code block 
pid="$1" 
SourcePath="$2" 
DestPath="$3" 
ToExecute="$4" 
WaitForProcessToEnd $pid 
MoveToTarget $SourcePath, $DestPath 
RunApplication $ToExecute 
exit 

回答

24

你「再使用了錯誤的語法來聲明函數,而不是使用這樣的:

MoveToTarget() { 
    # Function 
} 

或者這樣:

function MoveToTarget { 
    # function 
} 

但不能同時使用。

另外,我看到您稍後使用逗號分隔參數(MoveToTarget $SourcePath, $DestPath)。這也是一個問題。 bash使用空格來分隔參數,而不是逗號。刪除逗號,你應該是金色的。

+0

謝謝!現在有道理。我看到一些網站這樣做。 – rsmith 2011-06-14 16:53:20

+1

@rsmith那個網站是不正確的,那麼。 – 2011-06-14 16:53:45

+0

@rsmith命名的網站,或者是一個夢:-) – Jens 2016-03-02 21:00:34

4

我也是在bash腳本中定義函數的新手。我使用的版本4.3.11(1)一個bash: - 釋放(x86_64的-PC-Linux的GNU)的Ubuntu 14.04

我不知道爲什麼,但以關鍵字function開始的定義從來沒有爲我工作。

像下面

function check_and_start { 
    echo Hello 
} 

的定義產生錯誤信息:

Syntax error: "}" unexpected 

如果我把{到一個新的生產線,如:

function my_function 
{ 
    echo Hello. 
} 

它打印Hello.當我運行腳本時,即使我根本不調用這個函數,whi ch也是我們想要的。

我不知道爲什麼,這是行不通的,因爲我也看了很多教程和他們都放在花括號在第一行的末尾。也許它是我們使用的bash版本?無論如何,只是把它放在這裏以供您參考。

我必須使用C風格的函數定義:

check_and_start() { 
    echo $1 
} 

check_and_start World! 
check_and_start Hello,\ World! 

,它按預期工作。

+1

我有同樣的確切問題。刪除單詞功能並添加paran也適用於我。我注意到任何一種函數風格都可以在OS X上正常工作。儘管我的OS X運行的是bash的老版本。 – 2016-08-16 13:26:05

+0

謝謝! C風格正在爲'sh'shell工作 – 2017-12-27 07:48:06