フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

関数で使用する変数はいつ宣言すべきか?

シェルスクリプトの変数について、ちょっと試したことを載せます。

#!/bin/bash

val1=val1
function test1() {
  echo $val1
  echo $val2
  echo $val3
}

val2=val2

test1

val3=val3

function の前後に定義した値がどこまで取得できるのかを試してみました。

結果はこちら。関数の呼び出し前までに宣言された変数が参照可能なようです。なるほど。

❯ ./test.sh  
val1
val2

trap の場合

#!/bin/bash

val1=val1
function test1() {
    echo $val1
    echo $val2
    echo $val3
}

function _catch () {
    echo catch: $val1
    echo catch: $val2
    echo catch: $val3
    exit 0
}

trap _catch EXIT

val2=val2

test1

val3=val3

今度はすべての変数が出力されました。 変数がすでにメモリに格納された状態で関数が実行されたからですかね。

❯ ./test.sh  
val1
val2

catch: val1
catch: val2
catch: val3