1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

シェルスクリプトでポインタ渡しっぽいものを使う

Last updated at Posted at 2020-04-26

備忘録として記録しておく

概要

シェルスクリプト内で、引き渡した変数の値を変更する方法があった。
方法はいたってシンプルで変数の名前を関数に渡すことだ。

以下のようにすると関数内で変数の値を変更できる。


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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?