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
ck@cygwin 1.7

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

no image
vimで改行に置換

viで改行を置換(削除)するには、 :%s/\\n//g とすればよいですが、改 …

no image
Search Everything 日本語版

WordPressのページ機能でページを作成しても、検索窓の検索対象になりません …

no image
Sony VAIO Z (VPCZ22) にLinux (Fedora 16)入れてみた

Sony VAIO Z (VPCZ22) SSDベンチマークに引き続き、Fedo …

no image
bashでの配列操作

あまりbashの配列操作を書くことがないから覚え書き。 定義方法は &#8220 …

no image
chromeに独自のproxyを設定

Windows版のchromeのproxyの設定を開くと、システム(IE)のpr …

no image
コマンドラインのロック@CentOS 5

コンソールログインやssh接続などでコマンドラインを使用しているとき、少し席を外 …

no image
PostfixをMaildir形式に変更してCourier-IMAP使用@Debian Etch

SquirrelMailでWebメールを使おうと思ったところ、IMAPサーバが必 …

no image
gmailでフィルタリング転送した時メールは受信トレイに残るの?

gmailの基本転送機能は全てのメールをあるアドレスに転送しますが、フィルタを用 …

no image
grubの起動画面で日本語キーボート配列を使う

grub 起動時に起動オプションを変更する場合、日本語キーボード配列ではなくスト …