2012-04-19 6 views
0

という形式の変数から値を取得するシェルスクリプト(#!/ bin/sh)を使用している私が初めて、チュートリアルなどを読んで作業していますしかし、イムは、私はパラメータに渡すために、ユーザをしたいと思いフォームbashスクリプトがvar {id}

key1_begin=abc 
key1_end=def 

key2_begin=123 
key2_end=jkl 

.. and so on 

の設定ファイルからキー=値のペアを読み込むしようとしている

..キーのこの読み込みと書き込みの値にイム立ち往生スクリプトのように

something.sh 1 x y z 

最初のパラメータは、適切なキーを変更するために使用されるパラメータとして機能します。私は、ディレクトリが存在することを確認していると、ファイルは私がその後、ID = $ 1を使用してIDを保存し、取得するので、読み取り

echo key${ID}_begin 

を使用してキーにアクセス

source config.cfg 

使用して、それをソースが存在するので、後キーの値は、私が「key1_begin = ABC」を取得する代わりに、「key1_begin = 0」得続けることを期待し

echo key${ID}_begin = $[key${ID}_begin] 

だろう。しかし、同じコマンドは数字の仕事をするようです。たとえば、IDが2のこのコマンドを使用すると、「key2_begin = 123」というメッセージが表示されます。

数字が正しいのにアルファベットは正しく表示されません。

変数の値を変更するにはどうすればよいですか?

[ ! -z $2 ] && eval key${ID}_end=$3 

本当にこれで何かアドバイス/ポインタをお願い申し上げます。\

は、あなたが最も可能性が高い必要があるとして

+0

あなたが(むしろPOSIX shのために書くよりも)はbash-構文のみを使用することができるようにしたい場合'#!/ bin/sh'ではなく'#!/ bin/bash'でスクリプトを起動するべきです。 '/ bin/sh'が'/bin/bash'へのシンボリックリンクであっても、 '/ bin/sh'として呼び出されたときの非POSIX拡張の数。 –

答えて

0

ありがとう私は現在、「evalの」を使用していますが、これは再び数字のみで動作するようですただ、このよう

key1_begin=abc 
var="key${ID}_begin" 
echo "$var=${!var}" 
+0

これとNosidに感謝します。 KEY = key $ {ID} _beginを使用し、echo $ KEY = $ {!KEY}を読み込み、eval $ {KEY} = $ 2を書くために使用します。 – rb20

+0

@ rb20 evalはセキュリティホールに自分自身を開放しています - それを使用する代わりに、http://mywiki.wooledge.org/BashFAQ/006で与えられたアプローチを検討してください –

0

(bashのを想定):

0仲介変数を使用するには要するに

、bashで、あなたは

var=${!i} 

またはその他のシェル上で行うことができます

var=`eval echo \$$i`