Bash脚本错误:“function:not found”。 为什么会出现?

我试图在我的Ubuntu机器上运行一个bash script ,它给我一个错误:

function未find

为了testing,我创build了以下脚本,可以在我的笔记本电脑上正常工作,但不能在我的桌面上工 任何想法,为什么? 我的笔记本电脑是一个mac,如果这是相关的。

 #!/bin/bash function sayIt { echo "hello world" } sayIt 

这在我的笔记本电脑上返回“hello world”,但在我的桌面上返回:

run.sh:3:找不到函数hello world run.sh:5:语法错误:“}”意外

任何帮助将非常感激。

有可能在你的桌面上,你实际上并不是在bash下运行,而是dash或者其他一些不能识别function关键字的兼容POSIX的shell。 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 

我面临同样的问题,然后我修改了语法,它为我工作。 尝试删除关键字function,并在函数名称后添加括号()

 #!/bin/bash sayIt() { echo "hello world" } sayIt 

在函数名称之后或者在调用之后,它不需要()吗?

 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一些旧版本需要“()”。

 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$ 

还可以比较两个shell中的shopt选项(man bash)的状态,也许其中一个有一些compat语法打开或closures? 没有参数的“shopt”命令会列出支持的选项状态。

什么是在某些bash脚本中使用的“函数”关键字?