bashで変数の値を変数名にする方法
bashで変数の値を変数名にする方法を紹介します。
1.bashの間接参照を利用する
bashでは「!」を使って間接参照することで、変数の値を変数名として利用することができます。
#!/bin/sh
foo=hoge
bar=foo
echo ${!bar}
これを実行すれば
hoge
と出力されます。
ただしFreeBSDやSolarisではこのテクニックは使えないようです。
よって、プログラムを他のOSに移植する可能性がある場合は次項のテクニックを使った方がよいでしょう。
2.evalを使った間接参照を利用する
evalは変数を評価した後、引数の文字列をコマンドとして実行する機能があります。
evalを利用した間接参照で、変数の値を変数名として利用することができます。
#!/bin/sh
foo=hoge
bar=foo
eval echo \"\$$bar\"
これを実行すれば
hoge
と出力されます。
上記のサンプルでは、
eval echo \"\$$bar\"
がevalによって変数部分の「$bar」だけが評価されて
echo "$foo"
となり、これをコマンドとして実行します。
次のような形式でも動作しますが、変数の値が解釈されないよう、サンプルのように評価後に全体がダブルクォーテーションで括られるようにしておいた方が安全でしょう。
eval echo '$'"$bar"
eval echo \${$bar}
3.値を変数に代入する
2項の方法で標準出力に出力せずに変数に代入するには次のようにします。
#!/bin/sh
foo=hoge
bar=foo
eval test=\"\$$bar\"
上記のサンプルでは、
eval test=\"\$$bar\"
がevalによって変数部分の「$bar」だけが評価されて
test="$foo"
となり、これをコマンドとして実行し、変数testに値「hoge」が代入されます。
Posted by yujiro このページの先頭に戻る
- シェルスクリプトのexpectで応答メッセージを振り分ける方法
- bashでPostgreSQLのselect結果を出力する方法
- bashでbackspaceが動作しない場合の対処
- bashの変数から最後の1文字を取得・削除する方法
- bashのwhile文で利用した変数がループ外で反映されない場合の対処
- bashのechoでアスタリスク「*」がワイルドカードとして展開される場合の対処
- bashの正規表現でスペース(空白)を判定する方法
- bashで文字列の長さを調べる方法
- bashで数値を判定する方法
- bashで小数点を比較する方法
- bashの配列をjoinする方法
- bashのif文で正規表現を使用する方法
- Bashで変数を大文字または小文字に変換する方法
- bashの変数をsplitして配列を作る方法
- シェルスクリプトでtelnet接続する方法
トラックバックURL
コメントする
greeting