LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1135|回复: 8

函数返回值[已解决]

[复制链接]
发表于 2004-2-25 21:46:29 | 显示全部楼层 |阅读模式
在SHELL脚本中
例如在函数foo中用return ($var)
返回不了字符串
那应该怎么才能返回字符串
而且在调用时能用“var=foo 参数”的形式吗
然后显示echo $var.
发表于 2004-2-25 21:51:52 | 显示全部楼层

回复: 函数返回值

最初由 xggabc 发表
在SHELL脚本中
例如在函数foo中用return ($var)
返回不了字符串
那应该怎么才能返回字符串
而且在调用时能用“var=foo 参数”的形式吗
然后显示echo $var.

函数中的变量除非用local定义,否则都是全局的。也就是说,在函数里对变量的操作会影响函数外的同名变量,所以大可不必设置返回值,在函数外设置一(空)变量,在函数里对其动作即可。从另一个角度看,既然变量一般都是全局的,那在函数里定义并设置了变量,函数外也是可视的。再进一步看,函数是活动在调用它的脚本所在的同一shell进程的,所以除了参数变量以及用local定义的局部变量外,其他变量都是全局的。
发表于 2004-2-25 23:06:37 | 显示全部楼层
example about function:
  1. 1        function a {
  2. 2        ((sum=$1+1)) [color=red] <--------------------------|[/color]                     
  3. 3        return $sum   #函数把计算结果返回调用他的[color=red]|[/color]shell脚本                                          
  4. 4        }                                       [color=red] | [/color]  [color=red]  |[/color]
  5. 5        echo -n "The sum is"   [color=red]                  |     |[/color]
  6. 6        a $1    #调用函数a, $1为命令行参数[color=red]-------|     |[/color]
  7. 7        echo $? #函数的返回值总保存在?变量里 [color=red]<---------|   [/color]
  8. 8        echo $sum
复制代码
希望这个对你有用
 楼主| 发表于 2004-2-25 23:33:33 | 显示全部楼层
谢谢!
如果要实现同一个函数的不同调用
例如fu $l1 $l2
fu $l3 $l4等
且返回值不同
如何用不同的变量表示才不会?
我的方法有点繁琐,就是设置两个变量分别等于返回值
能否说简洁的方法?
还有一个问题就是
对于编译时环境变量的设置
ABS=-I/usr/local的形式
如果我已经通过函数得到文件所在的目录是/usr/local
那么ABS=-I如何和这个返回值连接起来?
前提是必须将/usr/local通过函数调用得到,再和ABS=-I连接?
 楼主| 发表于 2004-2-25 23:35:42 | 显示全部楼层
javalee的程序适合函数返回值是整数的情况
对返回字符串好像不是很适合
发表于 2004-2-25 23:38:41 | 显示全部楼层
最初由 xggabc 发表
javalee的程序适合函数返回值是整数的情况
对返回字符串好像不是很适合

呵呵~~~,这不过是一个例子,对我们理解函数的返回值有些了解罢了,
发表于 2004-2-26 09:02:08 | 显示全部楼层
举例:

  1. #!/bin/bash

  2. ## Fibonacci 数列函数

  3. function fib {
  4.     [ $1 = 0 -o $1 = 1 ] && {
  5.         echo $1
  6.         return
  7.     }
  8.     local x1=0
  9.     local x2=1
  10.     local x3=
  11.     local i=
  12.     for ((i = 1; i <= $1 - 1; ++i))
  13.     do
  14.         x3=$((x1 + x2))
  15.         x1=$x2
  16.         x2=$x3
  17.     done
  18.     echo $x3
  19. }

  20. xx=0
  21. while [ $xx -le 20 ]; do
  22.     printf "fib(%2d) = %d\n" $xx $(fib $xx)
  23.     xx=$((xx + 1))
  24. done
复制代码
发表于 2004-2-26 09:02:54 | 显示全部楼层
输出:

  1. fib( 0) = 0
  2. fib( 1) = 1
  3. fib( 2) = 1
  4. fib( 3) = 2
  5. fib( 4) = 3
  6. fib( 5) = 5
  7. fib( 6) = 8
  8. fib( 7) = 13
  9. fib( 8) = 21
  10. fib( 9) = 34
  11. fib(10) = 55
  12. fib(11) = 89
  13. fib(12) = 144
  14. fib(13) = 233
  15. fib(14) = 377
  16. fib(15) = 610
  17. fib(16) = 987
  18. fib(17) = 1597
  19. fib(18) = 2584
  20. fib(19) = 4181
  21. fib(20) = 6765
复制代码
 楼主| 发表于 2004-2-26 10:27:35 | 显示全部楼层
对于编译时环境变量的设置
ABS=-I/usr/local的形式
如果我已经通过函数得到文件所在的目录是/usr/local
那么ABS=-I如何和这个返回值连接起来?
前提是必须将/usr/local通过函数调用得到,再和ABS=-I连接?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表