bash - 如何声明一个本地整数?

时间:2012-06-25 10:20:14

标签: bash

在Bash中,我如何声明一个局部整数变量,例如:

func() {
  local ((number = 0)) # I know this does not work
  local declare -i number=0 # this doesn't work either

  # other statements, possibly modifying number
}

某处我看到local -i number=0被使用,但这看起来不太便宜。

3 个答案:

答案 0 :(得分:13)

http://www.gnu.org/software/bash/manual/bashref.html#Bash-Builtins

local [option] name[=value] ...
     

对于每个参数,创建一个名为name的局部变量,并赋值。该选项可以是声明接受的任何选项。

所以local -i有效。

答案 1 :(得分:11)

函数内的

declare会自动使变量本地化。所以这有效:

func() {
    declare -i number=0

    number=20
    echo "In ${FUNCNAME[0]}, \$number has the value $number"
}

number=10
echo "Before the function, \$number has the value $number"
func
echo "After the function, \$number has the value $number"

输出是:

Before the function, $number has the value 10
In func, $number has the value 20
After the function, $number has the value 10

答案 2 :(得分:0)

如果您最终使用的是Android shell脚本,您可能想知道Android正在使用MKSH而不是完整的Bash,这会产生一些影响。看看这个:

# woot.sh
KSH_VERSION:  @(#)MIRBSD KSH R50 2015/04/19
/system/xbin/woot.sh[6]: declare: not found
No fun:
  local   aa=2
  typset  bb=2
  declare cc=cc+1
/system/xbin/woot.sh[31]: declare: not found
With fun:
  local   aaf=2
  typset  bbf=2
  declare ccf=ccf+1

运行这个,我们得到:

declare

因此,在 Android {{1}}中并不存在。但是阅读,其他人应该是等同的。