2017-02-19 11 views
0

aaa[bbb]=0によって結合配列aaaを作成し、var=aaaを持っているとします。 varbbbを使用してaaa[bbb]を1だけ増やすにはどうすればよいのですか?実行時に配列の正確な名前がわからないことがあります。BASH:配列の内容を変数に格納されている名前で変更します。

私はeval "(($var[bbb]++))"を試しましたが、動作しませんでした。

ありがとうございます!

+1

あなたのコードは私に適しています。どのシェルを使っていますか?どのように失敗していますか?あなたのコードの結果をどうやってチェックしていますか? – Fred

+1

ちなみに 'eval'を使うと、変数の内容が安全であると保証できない場合(例えば、' var'の内容がパラメータとして渡されたり、ファイルから読み込まれた場合など)、コード注入リスクが発生する可能性があります。 – Fred

+0

@Fred私は 'echo $ {!var}'を試しましたが、ただ空白の行があります。私はbashを使用しています。 –

答えて

0

これは、コメントだけではなく、回答に留意するほど重要だと思います。あなたはありませんevalここに必要です。算術ステートメントは、パラメーター拡張とは無関係に変数の逆参照を行うため、単にパラメーター拡張を使用してvaraaaに置き換えるだけで十分です。

bash-4.4$ declare -A aaa 
bash-4.4$ aaa[bbb]=0 
bash-4.4$ ((aaa[bbb]++)) 
bash-4.4$ echo ${aaa[bbb]} 
1 
bash-4.4$ var=aaa 
bash-4.4$ (($var[bbb]++)) 
bash-4.4$ echo ${aaa[bbb]} 
2 
関連する問題