问题描述
我正在尝试在我的Ubuntu计算机上运行bash script
,它给我一个错误:
function not found
为了进行测试,我创建了以下脚本,该脚本可以在笔记本电脑上正常运行,但不能在台式机上正常运行。有什么想法吗?如果相关的话,我的笔记本电脑是Mac。
#!/bin/bash
function sayIt {
echo "hello world"
}
sayIt
这将在我的笔记本电脑上返回”hello world”,但在我的台式机上它将返回:
run.sh: 3: function not found hello world run.sh: 5: Syntax error: “}” unexpected
最佳办法
可能是在桌面上您实际上不是在bash
下运行,而是在dash
或其他无法识别function
关键字的POSIX-compliant 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-syntax在以下两种情况下均可工作:
$ more b.sh
#!/bin/sh
sayIt () {
echo "hello world"
}
sayIt
$ bash b.sh
hello world
$ dash b.sh
hello world
次佳办法
我遇到了同样的问题,然后修改了语法,它对我有用。尝试删除关键字函数,并在函数名称后添加方括号()。
#!/bin/bash
sayIt()
{
echo "hello world"
}
sayIt
第三种办法
ls -la /bin /sh
检查它指向bash或破折号的符号链接