2011-06-14 68 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