2013年1月19日土曜日

Bashの間接参照と配列

最近bashのスクリプトを書く機会が増えてきたのでメモ。
Bashでは変数に格納された文字列をほかの変数名とみなしてアクセスすることが可能
#!/bin/bash
BASE="Apple" 
echo ${BASE} 
REF="BASE"  
echo ${REF} 
echo ${!REF} 
このスクリプトの出力結果は以下のとおり。
~$./ref.sh
Apple
BASE
Apple

ただし、問題がひとつ、配列の場合は期待した結果が得られない。
#!/bin/bash                                

BASE=("Apple" "Orange" "Grape") 
echo ${BASE[@]}                            
REF="BASE"                                 
echo ${REF}                                
echo ${!REF[@]}                            
~$./ref_arrey.sh
Apple Orange Grape
BASE
0

これを解決するためにはevalを使用する。
#!/bin/bash

BASE=("Apple" "Orange" "Grape")            
echo ${BASE[@]}                            
REF="BASE"                                 
echo ${REF}                                
eval REF_ARRAY="\${${REF}[@]}"             
echo ${REF_ARRAY}    
~$./ref_arrey.sh
Apple Orange Grape
BASE
Apple Orange Grape

あんまりきれいな解決法じゃないなぁ。

0 件のコメント:

コメントを投稿