- PR -

変数の参照方法。

1
投稿者投稿内容
みきにゅう
会議室デビュー日: 2004/07/28
投稿数: 9
投稿日時: 2005-06-20 15:03
みきにゅうです。
(bash)スクリプト変数の参照方法について教えて頂きたい事があります。

------------
TEST1=test1
TEST2=test2
i=1
while [ i -le 2 ];
do
 echo _____
 i=`expr $i + 1`
done
------------

TEST1, TEST2 の'1', '2'を i と同期させて出力させたいです。

$"TEST${i}" で
test1
test2
となりそうな気がしたのですが、TEST1 が返ってきてしまいました。
他にも色々試してみたのですが、どうしてもうまくいきませんでした。

_____の部分はどのように指定すればよいでしょうか?
わかりづらい説明で申し訳ありませんが、よろしくお願いします。



[ メッセージ編集済み 編集者: みきにゅう 編集日時 2005-06-20 15:19 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-06-20 15:23
こんにちは。

変数名に変数を埋め込む…ということですね。
こういうことをやらせるなら、bash よりも Perl の方が楽なのですけどね…。

方法としては、

1. Perl で組み直す
2. 配列を使って組み直す
3. eval を使う

期待されているのに一番あっているのは、3 を使用して、

echo $( eval echo "\$TEST$i" )

のように組むことかな、と。
個人的にはあまりお勧めしませんが。

※ Perlの場合は、print ${"TEST$i"} のようになるのですが…、これもお勧めはしません。リストもしくはハッシュを使う方が見通しが良いでしょうから。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-06-20 16:57
コード:
#!/bin/sh

TEST1=test1
TEST2=test2
i=1
while [ $i -le 2 ];
do
  eval r=\$"TEST${i}"
  echo $r
  i=`expr $i + 1`
done

みきにゅう
会議室デビュー日: 2004/07/28
投稿数: 9
投稿日時: 2005-06-20 17:21
ご返信が遅くなり、申し訳ありません。
angelさん、コブラさん ご返信ありがとうございます。

ご教示頂きましたevalで組んでみましたところ、期待する値が得られました。

angelさん、コブラさん 大変ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)