rsm*_*ith 12 linux macos bash scripting syntax-error
由于某种原因,此功能正常工作,终端正在输出
newbootstrap.sh: 2: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)
这是我的代码(第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
Run Code Online (Sandbox Code Playgroud)
Raf*_*ler 27
您使用错误的语法来声明函数.请改用:
MoveToTarget() {
# Function
}
Run Code Online (Sandbox Code Playgroud)
或这个:
function MoveToTarget {
# function
}
Run Code Online (Sandbox Code Playgroud)
但不是两个.
此外,我看到稍后您使用逗号分隔arguments(MoveToTarget $SourcePath, $DestPath).这也是一个问题.bash使用空格来分隔参数,而不是逗号.删除逗号,你应该是金色的.
我对在 Bash 脚本中定义函数也很陌生。我正在Ubuntu\xc2\xa014.04 (Trusty Tahr) 上使用版本 4.3.11(1):-release (x86_64-pc-linux-gnu) 的 Bash。
\n我不知道为什么,但以关键字开头的定义function对我来说永远不起作用。
像下面这样的定义
\nfunction check_and_start {\n echo Hello\n}\nRun Code Online (Sandbox Code Playgroud)\n产生错误消息:
\n\n\n语法错误:“}”意外
\n
如果我把它放在{一个新行上,例如:
function my_function\n{\n echo Hello.\n}\nRun Code Online (Sandbox Code Playgroud)\n当我运行脚本时它会打印 a Hello.,即使我根本不调用这个函数,这也是我们想要的。
我不知道为什么这不起作用,因为我也看了很多教程,它们都将左大括号放在第一行的末尾。也许这是我们使用的 Bash 版本?无论如何,只是将其放在这里供您参考。
\n我必须使用 C 风格的函数定义:
\ncheck_and_start() {\n echo $1\n}\n\ncheck_and_start World!\ncheck_and_start Hello,\\ World!\nRun Code Online (Sandbox Code Playgroud)\n它按预期工作。
\n| 归档时间: |
|
| 查看次数: |
10544 次 |
| 最近记录: |