Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2315326
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类:

2010-08-04 14:21:39

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编程中, 在一个输出变量保存函数的返回结果, 而以函数返回值只用来指示成功与错误的信息.
阅读(816) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~