対象:sh、bash
eval を使いシェル変数の中に変数を入れる
たまに変数の中に変数を入れたくなる場面に遭遇します。その”たまに”がどんな場面だったのか記憶に無いのですが、とにかく過去にはあったので記録します。
サンプルコード variable_name.sh
#!/bin/sh ##### 変数名自体を変数に入れる # 最終的に参照したい変数名 x=xxx y=yyy # 変数名を入れる変数 Vname=x # 変数 x が参照される echo 1 '$'$Vname eval echo 2 '$'$Vname Vname=y # 変数 y が参照される echo 3 '$'$Vname eval echo 4 '$'$Vname
$Vname と言う変数の中にさらに変数名を入れています。10行目と17行目です。
echo で単純に参照した場合と、eval で変数を展開して参照した場合を比較して出力しています。実行結果は、下記を見てください。
実行結果
% variable_name.sh 1 $x 2 xxx 3 $y 4 yyy
eval を使うことによって、ちゃんと変数の中に変数が入っていることがわかりますね。
csh、tcsh 系は、↓↓↓ こちらにあります。ほとんど同じですがご覧ください。