2017-09-27 1 views
0

私の意図は、テーブルの値を動的に取得することです.t = 1のループの最初の実行では、tableの値は "table"でなければならず、 "other table "2回目の実行では、forループを使って変数の名前を付けようとしましたが、" table "、" other table "の代わりに" 1 "、" 2 "を出力しました。しかし、table = $ TABLENAME $ 1、output "テーブル"です。 私はエラーを選ぶことができませんでした、私はシェルスクリプトには新しいです、言い訳があれば、ありがとう!bashでテーブルの値を動的に取得する

TABLENAME1="table" 
TABLENAME2="other table" 
NUM_TABLE=2 
for ((t = 1; t <= ${NUM_TABLE}; t++)){ 
table=$TABLENAME$t 
echo $table 
} 
+1

'foobar = 1; foob​​az = 2; a = foo; b = bar; c = baz; d = $ a $ b;エコー$ {!d}; d = $ a $ c; echo $ {!d} 'あなたの場合' echo $ {!table} ' –

+0

あなたの説明をありがとうDavid、私はあなたの意見を持っています。 – nope

+0

ところで、これは[BashFAQ#6](http://mywiki.wooledge.org/BashFAQ/006)で包括的に扱われています。最初に問題が発生するのを避ける方法について説明します(連想配列やその他の構造を代替として)。 –

答えて

1

デビッド・C.ランキンは彼のコメントに書いたように、スクリプトは次のようになります。

TABLENAME1="table" 
TABLENAME2="other table" 
NUM_TABLE=2 
for ((t = 1; t <= ${NUM_TABLE}; t++)){ 
    var_name="TABLENAME"$t 
    echo ${!var_name} 
} 

まず、あなたは変数名(VAR_NAME)を取得し、$を使用する必要があります{VAR_NAME!}変数名をその値に展開する

+0

あなたの説明のためにマキシムをありがとう、今私には意味がありました。 – nope

+0

Heh。最初は私はあなたが* David Rankinだと思っていましたが、そのようにフラグを立てるのではなく、重複したものに答えることをお手伝いしていました([回答方法​​](https://stackoverflow.com/help/how-to) -回答))。新しいものでFAQの内容がわからない人は、もっと寛大になるでしょう。 :) –

関連する問題