Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

evalで変数名を変数にする@bash

      2013/07/15

シェルスクリプトで変数を使用していると、変数名を変数にしたい場合が出てきます。

しかし、以下のようなシェルを書いてもエラーになってしまいます。

#!/bin/bash
HOGE_1=1 
HOGE_2=2
for i in 1 2; do
echo ${HOGE_$i}
done
?$ ./hoge.sh
./hoge.sh: line 6: ${HOGE_$i}: bad substitution

そこで、evalの登場です。evalは、引数を一度評価してから実行します。つまり、

HOGE="echo hoge"
eval $HOGE

を実行すると、evalは$HOGEの内容を評価し、”echo hoge”に変換します。さらにこれを実行するので、hogeと表示されます。これを使えば変数名を変数にできます。具体的には、以下のようにします。

#!/bin/bash
HOGE_1=1 
HOGE_2=2
for i in 1 2; do
eval echo '$HOGE_'$i
done

実行すると、

$ ./hoge.sh
1
2

となりHOGE_1とHOGE_2の内容が表示されます。めでたしめでたし。

 - IT技術, プログラミング , ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
wuzzを使ってHTTPベースのAPIを手軽に実行@Linux with Docker

wuzz というAPIを手軽に叩きながら動作を確認するツールを使ってみた。 ちょ …

no image
VNC上の文字化け解消@CentOS 5

一部のアプリケーション、例えばJavaやOracleのインストーラーなどは、VN …

no image
JSPのJSTLとJSFの混在 – Unified EL(Expression Language)

JSFだけでJSPを書いていると、JSPのタグも使いたくなることがあります。今回 …

no image
お使いの端末はこのアイテムに対応していません@Android Market

Android Market が最近アップデートされて、見た目ががらりと変わりま …

no image
Linuxコンテナ(LXC)を使ってみた@Ubuntu 14.04

Linuxコンテナ(LXC)をUbuntu 14.04上で使用した時のメモです。 …

no image
Janetterのデータベースサイズが大きすぎる

ふと気づいたら、以下のフォルダのJanetterのデータベースのサイズが5GBも …

no image
ネットワーク遅延のシミュレーション@CentOS 5

最近のLinux では、簡単にネットワーク遅延をシミュレーションできるようです。 …

no image
echoコマンドで改行やタブを扱うには@Linux (Debian Etch)

UNIX系OSでも最も有名な部類に入るコマンドechoは、引数の文字列や変数の中 …

no image
Cのコメント部分を正規表現で検索@vim

ソースコードを機械的に解析する際、コメントが邪魔だったりします。 viでコメント …

no image
Tracにガントチャートプラグイン導入@Debian Etch

Tracの導入の記事で導入したTracにガントチャートプラグインを導入してみまし …