2012-06-25 10 views
7

、すなわちのようなもの: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が使用されて見ましたが、これは非常に移植見えません。各引数に

+0

プラットフォームに依存しないとはどういう意味ですか? Bashの組み込み関数はどこでも同じです。 –

+0

@larsmans Sryは、ポータブルであることを意味しています。 – helpermethod

答えて

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

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

、nameという名前のローカル変数が作成され、値が割り当てられます。オプションは、宣言によって受け入れられるオプションのいずれかになります。

so local -iが有効です。

+0

+1宣言と同じオプションを受け付けるかどうかはわかりませんでした。 – helpermethod

+1

'local'は' declare'のエイリアスであったので、驚くことではありません(Kornシェルではまだ 'typedef'のエイリアスです)。 – cdarke

9

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" 

を、出力は次のとおりです:これは動作します

あなたがAndroidのシェルあなたはAndroidがMKSHを使用していることを知ってほしいことがあり、スクリプトではなく、完全なバッシュで、ここで終わる場合
Before the function, $number has the value 10 
In func, $number has the value 20 
After the function, $number has the value 10 
0

、どのいくつかの効果があります。これをチェックアウト:

#!/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; 

がこれを実行すると、我々が得る:

したがって
# 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には存在しません。しかし、読んで、他のものは同等でなければなりません。

関連する問題