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脚本中使用的“函数”关键字?