1、你shebang里要写/bin/sh,就只能用posix shell的语法,否则不同发行版中的/bin/sh不见得会认,比如ubuntu默认的/bin/sh是dash就不认function fun1()这种非posix shell的语法。
posix shell的函数定义语法是
代码: 全选
name() compound-command [redirection]
bash还支持function这种
代码: 全选
function name [()] compound-command [redirection]
要么你改成去掉function的形式,要么你换成/bin/bash等支持这种写法的shell。对bash而言,function后面的()可以省略,加上也不影响
2、从上面的函数语法可以看到,函数体部分都是复合命令(compound command),所以要遵循复合命令的语法,posix shell的复合命令有以下几种:( xxx )、{ xxx }、for循环、while循环、until循环、if语句、case语句
它们的一个共性是会产生一个退出状态码exit code,一个空的{}没有退出状态码,所以不属于复合命令
以下都是合法的函数定义语句,虽然一般都不会这么写
代码: 全选
a()(echo 1)
b()for i in 1 2 3;do echo $i;done
c()if [ $USER = "root" ];then echo root;else echo non-root;fi
bash支持其他的一些复合命令,具体见bash的manpage