evalで文字列を変数として展開する

evalは文字列を式として評価するコマンドである。
文字列を変数として展開したり、関節参照する際に用いる。

文字列を変数として展開する

例えば以下のような文字列をevalで展開してみる。

すると、実行結果は以下のようになる。

このように文字列の’val1=10 val2=sample’を、val1とval2という変数に展開してくれるため
echoを使って出力すると、値としての’10’と’sample’が出力される。

もちろん変数の中に格納されている文字列を展開することも可能で

このコードの実行結果は

このようになる。

このevalの機能は、DBからクエリで引っ張ってきたデータを利用してCSVなどのデータを作成したり文字列を作成する際に役に立つ場面が結構ある。

例えばユーザーの個人情報を管理しているようなテーブル「user」があったとして、そこからユーザー名「name」カラムと電話番号「phone_num」カラムを利用して
nameさんの電話番号はphone_numです。
みたいな文字列を出力させたい場合は、shell scriptから実行するSQLでconcatを利用して

のように結果がname=XXX,phone_num=YYYの文字列として返ってくるようにクエリを発行する。

その後はquery_resultをevalで展開し、最終的に出力するための文字列を構築すれば良い。

※userテーブルのレコードが1件の場合はこれで良いが、1件しかないテーブルは稀だと思うので、状況に応じてforでループが必要

変数の二重展開(間接参照)

例えば変数の中の値が変数名を表している場合、間接的に参照して値を取り出すことができる。

このように書くことで、$val1の値の’val2’が”$val2″という文字列になるため、

と記述した場合と同じこととなる。
結果は以下

シェアする

  • このエントリーをはてなブックマークに追加

フォローする