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
Google Plublic DNS

Google が提供しているパブリックDNSサービス。名前解決が早くなり、インタ …

no image
遅いネットワークでsshの応答が遅い

遅いネットワーク、特にモバイル端末経由でsshを使ったりする場合、一文字打つのに …

no image
オフラインファイルの削除@Windows XP

Windowsにはオフラインフォルダといって、ネットワーク共有のファイルをネット …

no image
vim-rubyインストール@Debian etch

vim-rubyを使うとrubyのプログラム編集で、補完機能を使うことができるら …

no image
iptablesの操作@Fedora 17

iptables を起動時に自動起動するようにする # system enabl …

no image
Google Music の文字化け対策まとめ

まだ日本ではサービス開始されていませんが、Google Music が便利そうな …

no image
使用中のファイルの追跡@WindowsXP

Windows上であるファイルを削除しようとすると、使用中で削除出来ないときがあ …

no image
PS3のハードディスク交換にあたって

PS3 20GBモデルはハードディスク容量がそのうち不足するだろうから、そのうち …

no image
ソースコードを読むためのツール

CodeReadingWikiを改造してみました  →  こちら 現在多くのアプ …

no image
IPv6試してみました @ RHEL5

自分自身は表す(ipv4では127.0.0.1) 方法は、 ::1 だそうです。 …