LinuxSir.cn,穿越时空的Linuxsir!

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

Why I can't use function in BASH? [已解决]

[复制链接]
发表于 2004-3-1 11:09:25 | 显示全部楼层 |阅读模式
I get a bash article from Internet, it has a script example like this:
#/bin/bash
HELLO=Hello
function hello{
  local HELLO=World
  echo $HELLO
}
echo $HELLO
hello
echo $HELLO

but when I executed it, it shows the wrong:
        ./test.sh: line 4: syntax error near unexpected token `local'
        ./test.sh: line 4: `local HHELLO=World'

And the same as the following script:
#!/bin/bash
function quit{
  exit
}
function hello{
  echo Hello!
}
hello
quit
echo foo

The wrong is:
./test.sh: line 3: syntax error near unexpected token `exit'
./test.sh: line 3: `  exit'
发表于 2004-3-1 11:46:06 | 显示全部楼层
BASH:
  1. #!/bin/bash
  2. name () { echo "hello";exit; }
  3. name
  4. echo "bey"
复制代码
这样试试~,因为定义在脚本中的函数本身就是局部变量,所以没有必要用local,用local的方法好像是很过时的吧~
 楼主| 发表于 2004-3-1 11:58:22 | 显示全部楼层
感谢 javalee兄的及时答复。
但我想知道为何我的那两个脚本出错。期待中……
发表于 2004-3-1 12:13:46 | 显示全部楼层
脚本中定义的变量不能在函数中重复定义,修改如下:
  1. #/bin/bash
  2. a=Hello
  3. function hello {
  4. local b=World
  5. echo $b
  6. }
  7. hello
  8. echo $a
复制代码
发表于 2004-3-1 13:08:41 | 显示全部楼层
最初由 javalee 发表
定义在脚本中的函数本身就是局部变量,所以没有必要用local,用local的方法好像是很过时的吧~

反对::p
local 之我用:

  1. #!/bin/bash
  2. # vi:set ts=8 sw=4 ft=sh:

  3. # 文件名: fib.sh
  4. #   功能: 计算 Fibonacci 数列的前 n 项值
  5. #   说明: 此脚本说明了递归函数的写法

  6. # 递归函数定义
  7. function fib {
  8.     if [ $1 -lt 2 ]; then
  9.         echo -n $1
  10.     else
  11.         local n_2=$(($1 - 2))
  12.         local n_1=$(($1 - 1))
  13.         local f_n_2=$(fib $n_2)
  14.         local f_n_1=$(fib $n_1)
  15.         local f_n=$((f_n_2 + f_n_1))
  16.         echo -n $f_n
  17.     fi
  18. }

  19. n=10
  20. for ((i = 0; i < $n; i++))
  21. do
  22.     printf "fib(%2d) = %d\n" $i $(fib $i)
  23. done
复制代码
发表于 2004-3-1 13:10:27 | 显示全部楼层
local 变量的作用相当于 C 语言中的局部变量, 谁敢说 C 语言中的局部变量过时了:p
发表于 2004-3-1 13:14:04 | 显示全部楼层
最初由 dearvoid 发表
local 变量的作用相当于 C 语言中的局部变量, 谁敢说 C 语言中的局部变量过时了:p

您是高手!佩服佩服!
 楼主| 发表于 2004-3-1 13:37:06 | 显示全部楼层
好郁闷呀,按 javalee兄的代码还是错误呀。但 dearvoid 的代码我却可以执行——只是还有点看不懂
发表于 2004-3-1 13:43:01 | 显示全部楼层
最初由 xuchunqiang 发表
好郁闷呀,按 javalee兄的代码还是错误呀。但 dearvoid 的代码我却可以执行——只是还有点看不懂

/home/javalee:cat hello
#/bin/bash
a=Hello
function hello {
local b=World
echo $b
}
hello
echo $a
/home/javalee:bash hello
World
Hello
 楼主| 发表于 2004-3-1 13:53:33 | 显示全部楼层
好郁闷呀,按 javalee兄的代码还是错误呀。但 dearvoid 的代码我却可以执行——只是还有点看不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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