2017-08-28 14 views
0

私は変数を特定のファイルに含まれる数に従って割り当てる必要があるプロジェクトに取り組んでいます。すべてのコードを含めて説明するのは無意味かもしれないと思うので、私は単純な例を含む質問に減らしました。このサンプルコードでBash:ループ変数に依存する代入と参照

for ((i=1; i<=3; i++)); 
do 
    align_$i=100_$i 
done 

、私は(他の2の中で)、次のエラーを取得しています:

line 3: align_1=100_1: command not found 

ので、私は私のメソッドの置換が働いている知っているが、それは正しい割り当てとして認識されません。私は明らかに簡単な間違いを犯していますが、本当にこれを解決する方法はありません。

ちょっとしたアイデア:私は、変数がループ変数に二重依存する変数の値を呼び出す際に問題が発生しています。私はalign_1の値を呼び出しますが、

for ((i=1; i<=3; i++)); 
    do something with $align_$i 

のようにそうする必要がありますする必要が別のループにあった場合 ので、上記の例からなって正しい出力を使用して、どのように私はこれを適切に行うだろうか?これらの変数を使用することは別のループになければなりません。そうしないと、この問題は発生しません。

私は簡単な質問をお詫び申し上げます.Bashは私の強みではありません。あなたは、アレイ(または非数値キーで連想配列)を使用している場合ではない

これの必要性は、一般的に回避することができます:

+1

これは間違いなく、間接的な割り当てや拡張に関する多くの多くの質問と重複しています。 –

+0

特に[BashFAQ#6](http://mywiki.wooledge.org/BashFAQ/006)を参照してください。 –

答えて

2

ベスト回答ありがとうbashのオン

しかし、あなたがしなければならない場合
align=() 
for ((i=1; i<=3; i++)); do 
    align[$i]="100_$i" 
done 
...

4.3以降

namevarは、エイリアス化された変数名で完全な双方向アクセス(読み取りと書き込みの両方)を可能にします。古いリリース

for ((i=1; i<3; i++)); do 
    declare -n align_var="align_$i" 
    align_var="100_$i" 
    unset -n align_var 
done 

...そしてあなたは、bashの4.3以降がprintf -vを使用しないでん場合:

for ((i=1; i<3; i++)); do 
    printf -v "align_$i" %s "100_$i" 
done 
別名目標は、配列そのものを含め、どのようなタイプのものとすることができます

+0

重複した質問にもかかわらず、ありがとう!あなたは初心者のBashプログラマーが白血病関連遺伝子を見つけるのを手伝っています:) – xcpat

関連する問題