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
SD経由で着信音にする方法

通常、SDカード経由で携帯に3gpファイルをコピーした場合、着信音やアラーム音に …

no image
VMWare Server 2.0のディスクイメージを1.0で使う

VMWare Server 2.0がリリースされて随分たちましたが、2.0系のデ …

no image
b-mobileのプロキシ

b-mobileのプロキシって三つあるんですね。 marion 低圧縮 mari …

no image
dsniffパッケージ@Debian Etch

最近ブラッディ・マンデイというドラマの主人公がハッキングするシーンを解説するサイ …

no image
Date型@EntityBean

EntityBeanからDate型にマッピングしたデータを取り出した場合、jav …

no image
SVNのシンボリックリンク?

SVNでソースを管理している時、ある他のリポジトリで管理されているライブラリを参 …

no image
簡単バックアップシェル

サーバ管理していると、ちょっとしたデータを定期的にバックアップしたいことがありま …

no image
xrdpコンパイル@Ubuntu 14.04

以前、xrdp のバグで古いセッションに再接続できないことを書き、暫定対処で古い …

no image
ck@cygwin 1.7

cygwin 1.7 より前では、ターミナルエミュレータにckを使っていたのです …

no image
coreファイルの扱いについて

coreを吐かせるにはulimitで制限されていない必要がある # ulimit …