備忘録として記録しておく
概要
シェルスクリプト内で、引き渡した変数の値を変更する方法があった。
方法はいたってシンプルで変数の名前を関数に渡すことだ。
以下のようにすると関数内で変数の値を変更できる。
TEST(){
eval $1=10
}
var=1
echo "var=$var"
TEST var
echo "var=$var"
結果
var=1
var=10
local 変数であっても変更できる
TEST(){
eval $1=10
}
MAIN(){
local var=1
echo "var=$var"
TEST var
echo "var=$var"
}
MAIN
結果
var=1
var=10
引き渡された変数を横流ししても変更できる。
TEST1(){
TEST2 $1
}
TEEST2(){
eval $1=10
}
MAIN(){
local var=1
echo "var=$var"
TEST1 "var"
echo "var=$var"
}
MAIN
結果
var=1
var=10
インクリメントは以下の様に行う。
TEST2(){
TEST1 $1
}
TEEST1(){
eval "$1=\$((\$$1+1))"
}
MAIN(){
local var=$1
echo "var=$var"
TEST2 "var"
echo "var=$var"
}
MAIN 1
MAIN 5
結果
var=1
var=2
var=5
var=6