bash脚本中的函数模仿的是命令的功能, 而不是C语言中的函数. 虽然, 它也叫函数.
首先, 它处理参数的方式, 跟主程序处理$1, $2 一样, 模拟的是C的main(int argc, char **argv)
当然, 这就是几乎所有unix下命令行工具的处理模型
其次, 它的返回值, 是它最后一个命令的返回值, 没有类型, 但心照不宣地是int型, 同样心照不宣是, 0代表成功, 而非0代表失败.
你可能象我一样, 以其它语言里函数的概念使用bash的脚本, 比如
function foo()
{
return "hello"
}
a=$(foo)
你是否期待, a变量的值是"hello", 它不会! 如果要达到这个效果, 你需要在foo中echo "hello", 而不是return
但, local 可以让我们可以达到类似的效果:
function foo()
{
out_var_name=$1
eval "$out_var_name=hello"
}
a=
foo("a")
echo $a
如果a是出现在另一个函数的内部, 比如:
function bar()
{
local a;
foo("a");
echo $a
}
local是必需滴.
其实, 这样的用法即使在其它语言里也是常用的一个模式, 如COM编程中, 在一个输出变量保存函数的返回结果, 而以函数返回值只用来指示成功与错误的信息.
阅读(844) | 评论(0) | 转发(0) |