Bash - How to declare a local integer?

In Bash, how to declare a local integer variable, for example:

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 } 

Somewhere I used local -i number=0 , but it does not look very portable.

+7
source share
3 answers

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

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

For each argument, a local variable named name is created and a value is assigned. This parameter can be any of the options accepted by the ad.

So local -i .

+10
source

declare inside the function automatically makes the variable local. So this works:

 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" 

And the result:

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

In case you got here with an Android script shell, you might need to know that Android uses MKSH, and not full Bash, which has some effects. Check this:

 #!/system/bin/sh echo "KSH_VERSION: $KSH_VERSION" local -i aa=1 typeset -i bb=1 declare -i cc=1 aa=aa+1; bb=bb+1; cc=cc+1; echo "No fun:" echo " local aa=$aa" echo " typset bb=$bb" echo " declare cc=$cc" myfun() { local -i aaf=1 typeset -i bbf=1 declare -i ccf=1 aaf=aaf+1; bbf=bbf+1; ccf=ccf+1; echo "With fun:" echo " local aaf=$aaf" echo " typset bbf=$bbf" echo " declare ccf=$ccf" } myfun; 

Running this, we get:

 # 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 

So in Android declare does not exist. But while reading, others should be equivalent.

0
source

All Articles