深入脚本编程之三: 让函数能返回计算结果
时间:2010-08-04 来源:slimzhao
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编程中, 在一个输出变量保存函数的返回结果, 而以函数返回值只用来指示成功与错误的信息.
首先, 它处理参数的方式, 跟主程序处理$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编程中, 在一个输出变量保存函数的返回结果, 而以函数返回值只用来指示成功与错误的信息.
相关阅读 更多 +