Bash-错误消息'语法错误:"(“出乎意料”;



由于某些原因,此函数工作正常。终端正在输出

newbootstrap.sh:2:语法错误:"("出乎意料的

这是我的代码(第2行是函数MoveToTarget() {

#!/bin/bash
function MoveToTarget() {
    # This takes two arguments: source and target
    cp -r -f "$1" "$2"
    rm -r -f "$1"
}
function WaitForProcessToEnd() {
    # This takes one argument. The PID to wait for
    # Unlike the AutoIt version, this sleeps for one second
    while [ $(kill -0 "$1") ]; do
        sleep 1
    done
}
function RunApplication() {
    # This takes one 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

您在声明函数时使用了错误的语法。使用这个替代:

MoveToTarget() {
    # Function
}

或者这个:

function MoveToTarget {
    # function
}

但不是两者都有。

另外,我看到稍后您将使用逗号分隔参数(MoveToTarget $SourcePath, $DestPath)。这也是一个问题。Bash使用空格分隔参数,而不是逗号。去掉逗号,你就应该是金黄色的。

我也是在Bash脚本中定义函数的新手。我在Ubuntu 14.04(Trusty Tahr)上使用的是4.3.11(1):-版本的Bash(x86_64-pc-linux-gnu)。

我不知道为什么,但以关键字function开头的定义对我来说从来都不起作用

类似以下的定义

function check_and_start {
  echo Hello
}

生成错误消息:

语法错误:"}"意外

如果我把{放在一条新的线上,比如:

function my_function
{
    echo Hello.
}

当我运行脚本时,它会打印一个Hello.,即使我根本不调用这个函数,这也是我们想要的。

我不知道为什么这不起作用,因为我也看了很多教程,他们都把开放的大括号放在了第一行的末尾。也许这就是我们使用的Bash版本??不管怎样,把它放在这里供你参考。

我必须使用C风格的函数定义:

check_and_start() {
  echo $1
}
check_and_start World!
check_and_start Hello, World!

并且它如预期的那样工作。

如果您遇到"语法错误:"("出乎意料",然后使用"bash"而不是"sh"。

例如:

bash install.sh 

我遇到了同样的问题。我在Ubuntu上运行脚本,有时使用sh和Dash。使用sh运行脚本似乎会导致问题,但使用Dash运行脚本效果良好。

最新更新