bash中的函数与返回值

Date:  2015/5/9   Sort:  编程开发 3147 Views / 0 Comments 

  最近写了一些BASH脚本,在感受到不一样的编程风格的同时也对“命令”这一概念有了更加深入的理解。

  在bash中,函数的返回值只能为整数,且必须用return返回:

function test
{
  echo $1
  return 0
}

  当你调用test函数:

test 呵呵
echo $?

  将会显示:

呵呵
0
   从这里可以看出几点与C-like语言的不同:

1、函数调用的实参不需要加括号,使用形参时则是直接以$1、$2、$3等等代表第n个参数(与dos类似);

2、函数的返回值不能直接赋予某个变量,而是由系统自动存储在名为“$?”的临时变量中(与Windows API中的GetLastError类似)。如果要使用函数的某个返回值,必须先调用函数,紧接着读取$?(注意中间不能间隔其他命令,否则$?变量就会被其他命令的返回值覆盖);

3、如果要使某个函数“返回”除整数以外的结果,则必须先将其输出(echo),然后在主函数中读取它(即借助标准输出作为缓冲):

result=$(test 呵呵)
echo result is $result
结果显示“result is 呵呵”。注意这里$(...)作用是将命令的输出赋给变量,也可以用`...`(注意是反引号,不是单引号)来代替;

4、如果在bash开头加入了这一句:

set -e
那么一旦某个命令的返回值不为0(往往意味着有错误发生),脚本会立刻终止运行(相当于执行exit 0)。之前我修改别人的一个脚本,想用grep获取其他命令中的字符串,但当grep返回为空时总是停止运行,纳闷之余上网查了一下,才知道原来脚本开头有个"set -e",尼玛不带这么玩的……

转载本站文章请注明,转载自:WTZ的小博[ http://wiblog.net/]
知识共享许可协议 本作品采用知识共享署名 4.0 国际许可协议进行许可。

更多