2017-02-17 13 views
0

シェルスクリプトで変数を読み込み、その変数を使用して何らかの操作を行う必要があります。例えば、私は設定から​​変数市場を読み取り、使用される別の変数redis_host_silver_$jUNIXシェルスクリプトで変数を読み込み、操作を実行する

コマンドの値を見つけるために、この変数を使用しています: - は

for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`; 
do 
    echo $(redis_host_silver_$j); 
done 

は、誰もがこれで私を助けることができますか?

+0

を必要としない、以下のようなエラーを取得イム: - 'echo $ markets |'のjのための+ (i = 1; i = NF; ++ i)print $ i} '\' ''' ++ redis_host_silver_uk test.sh:61行目:redis_host_silver_uk:awk -F"、 "コマンドが見つからない –

+0

echoのようにエコーを引用してみてください。redis_host_silver_ $ j ";' – Jack

+0

また、そのようにする権限がある場合、元の質問を編集してエラーメッセージを追加すると便利です – Jack

答えて

1

エラーはecho $(redis_host_silver_$j);部分です。

bashで$()構文はあなたが実際にredis_host_silver_$j

てみ実行しようとしているので、コマンドとして内部に何拡大:redis_host_silver_...はあなたの変数の名前である場合

for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`; 
do 
    echo "redis_host_silver_$j"; 
done 

をその価値を求めてください:

for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`; 
do 
    VAR=redis_host_silver_$j; echo ${!VAR}; 
done 

中括弧に注意してください

+0

ありがとうたくさんのジャック!!!このハックは働いた.. –

+0

喜んで助けてください。どちらの方法を使いましたか? – Jack

+0

間接的な展開は 'eval'よりはるかに良い選択肢のように思えます...(どのように私はそれに近づくでしょうか...) –

0

私は個人的にはforループを使用して、プロセス置換から直接データを読み出すことになります。 間接呼び出しがうまくいっている間は、変数の型が間違っていて、2番目の変数redis_host_silverが実際にファイルの項目をインデックスとして持つ配列である必要があります。

そのため、おそらくのようなもの:「市場」からの値が数値である場合

IFS="," read -ra items <<<"$markets" 

for item in "${items[@]}" 
do 
    echo "${redis_host_silver[$item]}" 
done 

は、その配列への呼び出しで「項目」変数は、「$」

関連する問題