Hitachi

JP1 Version 11 JP1/Advanced Shell 


5.5.3 関数情報配列

adshexecコマンドが実行する関数の情報は,一次元配列である関数情報配列に格納されます。

関数情報配列の使用有無は環境設定パラメーターVAR_SHELL_FUNCINFOで定義します。配列名も環境設定パラメーターVAR_SHELL_FUNCINFOの指定によって決まります。環境設定パラメーターVAR_SHELL_FUNCINFOについては,「7.3.54 VAR_SHELL_FUNCINFOパラメーター(関数情報配列の使用有無を選択する)」を参照してください。

関数情報配列の特徴は次のとおりです。

〈この項の構成〉

(1) 関数情報配列の種類

関数情報配列には次の表に示す種類があります。

表5‒35 関数情報配列の種類と配列名

配列の種類

説明

配列名

VAR_SHELL_FUNCINFOにTYPE_Aを指定した場合

VAR_SHELL_FUNCINFOにTYPE_Bを指定した場合

呼び出し関数名称配列

呼び出しスタックにあるすべての関数名を格納する配列です。

要素番号0には現在実行中の関数名を格納します。最も下の要素には"main"を格納します。

シェル標準コマンドの.(ドット)コマンド,およびスクリプト拡張コマンドの#-adsh_scriptで外部スクリプトを呼び出した場合は"source"を格納します。

ADSH_FUNCNAME

FUNCNAME

関数呼び出し行番号配列※1

呼び出しスタックにあるすべての関数が呼び出されたスクリプトファイルの行番号を格納する配列です。

要素番号0には現在実行中の関数を呼び出した行番号を格納します。最も下の要素には"0"を格納します。

外部スクリプトの場合はシェル標準コマンドの.(ドット)コマンド,およびスクリプト拡張コマンドの#-adsh_scriptを実行した行番号を格納します。

属性は整数型へ変更することもできます。

ADSH_LINENO

BASH_LINENO

関数定義スクリプトファイル名配列※2

呼び出しスタックにある関数が定義されたスクリプトファイル名を格納する配列です。

要素番号0には現在実行中の関数を定義したスクリプトファイル名を格納します。最も下の要素にはジョブ定義スクリプト名を絶対パスで格納します。

外部スクリプトの場合は外部スクリプトファイルを絶対パスで格納します。

ADSH_SOURCE

BASH_SOURCE

注※1

シグナルや強制終了要求を受けたときにtrapアクション内で関数を呼び出した場合,関数呼び出し行番号配列には,trapアクション内ではなく,trapアクションを呼び出した処理の行番号が格納されます。

例えば,次の定義では行番号4で関数fn1を呼び出していますが,行番号4はtrapアクション内のため,行番号6が配列に格納されます。

1  fn1(){
2    echo ${ADSH_LINENO[*]}
3  }
4  trap fn1 INT
5
6  kill -INT $$
7  pwd
注※2

adshexecコマンドを-rオプションで実行した場合,関数定義スクリプトファイル名配列のスクリプトファイル名には「-r CMDLINE」が格納されます。例を次に示します。

C:\tmp>adshexec -m SIMPLE -r "echo ${ADSH_SOURCE[*]}"
-r CMDLINE
 
C:\tmp>

(2) 関数情報配列の構造

次のジョブ定義スクリプト(ファイル名:func.ash)を例に,配列の遷移について説明します。

1    fn3(){
2      echo "JP1/AS"
3    }
4    fn2(){
5      fn3
6    }
7    fn1(){
8      fn2
9    }
10   fn1

このジョブ定義スクリプトを実行すると,配列の状態は関数fn3の実行によって次の図のように遷移します。

[図データ]

(3) 関数情報配列に関する注意事項